求教根据函数字符串名调用函数的方法

jackzhang1204 2012-01-13 05:32:34
请问除了用eval方法来根据函数字符串名调用函数外,还有没有其它的方法。如下面代码:

(function(){
var Effects = window.Effects = function(){
var transTotal = 10;
this.transition = function (maskID, maskTime){
if (maskID <= transTotal) {
var maskFunName = "mask" + maskID;
eval(maskFunName)(maskTime);
//请问这里除了用eval方法来根据函数字符串名调用函数外,
//还有没有其它方法,下面这种写法不行又是错在哪里。
//this[maskFunName].apply(this, maskTime);
} else {
mask1(maskTime);
}
}
function mask1(maskTime) {
alert("mask1: " + maskTime);
}
function mask2(maskTime) {
alert("mask2: " + maskTime);
}
function mask3(maskTime) {
alert("mask3: " + maskTime);
}
};
})();

var masker = new Effects();
masker.transition(3, 2);
masker.transition(30, 8);
...全文
347 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2012-01-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jackzhang1204 的回复:]
看来还是这你理解了我的意思,但是按你的方法我在transition方法前定义了
var that = this;
然后在里面通过that[maskFunName](maskTime);来调用还是不行。

另外请问下,说采用window[maskFunName]();方法的同学,那些mask函数都是私有的函数你如何在外面访问的到?
[/Quote]

原来你们在纠结 window 这个东西啊?这个不需要纠结吧,就改为面向对象实现不行么?
另外,二楼的并没有用window啊,他为啥也不满足你们的要求?


var Foresee = {
create: function(){return function() {this.init.apply(this,

arguments);};},
get: function(objId){return document.getElementById(objId);}
};
Foresee.Base = function() {};
Foresee.Base.prototype = {
funName:function() {
alert("你好");
},
callByName:function(_funName) {
this[_funName]();
}
};

var base = new Foresee.Base();
base.funName();
base.callByName("funName");
jackzhang1204 2012-01-14
  • 打赏
  • 举报
回复
看来还是这你理解了我的意思,但是按你的方法我在transition方法前定义了
var that = this;
然后在里面通过that[maskFunName](maskTime);来调用还是不行。

另外请问下,说采用window[maskFunName]();方法的同学,那些mask函数都是私有的函数你如何在外面访问的到?

[Quote=引用 6 楼 chenjianhuacool 的回复:]

建议。仅仅是建议代表个人观点。

同志们,不应该是都是 window[maskFunName]();把?如果是在javascript的面向对象编程中呢、。?这个也太盲目了吧。
是不是应该在函数定义的那个环境变量里面先定义一个参数来获取当时的环境变量?也就类似于var environment = this;

然后调用 environment [maskFunName]();
不要动不……
[/Quote]
chenjianhuacool 2012-01-14
  • 打赏
  • 举报
回复
建议。仅仅是建议代表个人观点。

同志们,不应该是都是 window[maskFunName]();把?如果是在javascript的面向对象编程中呢、。?这个也太盲目了吧。
是不是应该在函数定义的那个环境变量里面先定义一个参数来获取当时的环境变量?也就类似于var environment = this;

然后调用 environment [maskFunName]();
不要动不动的就说什么window,比谈钱伤感情。

不同意见跟帖。
p2227 2012-01-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jackzhang1204 的回复:]

可能我没说清楚,在内部调用哪个mask函数时是要根据实例调用方法时调用的参数maskID来决定的.因为mask可能有很多个mask1,mask2,mask3.....maskn.
[/Quote]有字符串的地方你拼接就可以了
MiceRice 2012-01-13
  • 打赏
  • 举报
回复
前面两个方案应该都支持你的要求啊:

function callByName(maskID) {
var maskFunName = "mask" + maskID;
window[maskFunName]();
}
jackzhang1204 2012-01-13
  • 打赏
  • 举报
回复
可能我没说清楚,在内部调用哪个mask函数时是要根据实例调用方法时调用的参数maskID来决定的.因为mask可能有很多个mask1,mask2,mask3.....maskn.
p2227 2012-01-13
  • 打赏
  • 举报
回复
function funName() {
alert("你好");
}

(new Function("funName()"))()

MiceRice 2012-01-13
  • 打赏
  • 举报
回复
似乎没有那么复杂吧,给你参考:


<script language="javascript">

function funName() {
alert("你好");
}

window["funName"](); // 这应该是你要的吧?

</script>
代码下载链接: https://pan.quark.cn/s/8d73d870e377 瑞萨电子有限公司出品的瑞萨单片机是一系列微控制器产品,它们被广泛部署于工业控制、消费类电子以及汽车电子等多个领域。在众多瑞萨单片机产品中,RL78G13系列,尤其是型号为RL78/G13(R5F100LEA)的单片机,凭借其卓越的性能、极低的能耗以及全面的功能组合,成为了众多开发者的理想选择。本快速入门指南旨在向读者展示如何借助RL78/G13开发套件进行开发工作。该开发套件由两个主要部分构成:一个仿真器(Emulator板),以及一个内嵌振荡器且无需外接晶振的微控制器单元(MCU板),这两部分通过USB接口实现连接。为了进行开发,必须使用CubeSuite+作为开发环境,这是一款支持多种瑞萨MCU的综合开发软件套件。在部署开发环境之前,用户首先需要在个人计算机上安装CubeSuite+以及相关的USB驱动程序。具体的软件需求包括.NET Framework 4.0 SP1、Visual C++运行时库(即Visual C++ 2010 SP1可再发行包),以及可能的其他必要驱动程序。在软件安装和创建应用工程的过程中,应避免使用中文字符作为路径、文件夹或文件,以防止由此引发的兼容性难题。安装流程可以分为以下几个环节:首先,安装.NET Framework 4.0 SP1,这是确保CubeSuite+能够正常运行的必要软件组件;其次,安装Visual C++运行时库,目的是为了支持CubeSuite+的顺畅运行;再次,安装CubeSuite+软件本身,其版本号为2.00.00a,安装包中可能已包含Microsoft Visual C++ 2010 SP1,将自动进行安装;最后...
已经博主授权,源码转载自 https://pan.quark.cn/s/a4b39357ea24 在当前的科技产品市场中,苹果笔记本电脑以其实用性和高端定位,成为了许多消费者和专业人士的首选。 然而,由于苹果笔记本电脑的高昂价格和精密构造,购买时的检验工作显得尤为关键,特别是对于屏幕质量的检查。 屏幕坏点是液晶显示屏常见的问题,它们是屏幕上的像素点出现了永久性的色彩偏差或者不亮的情况,这些问题在长期使用中可能不断加剧,从而影响用户的使用体验。 针对这一问题,市场上出现了一款专为苹果笔记本用户设计的屏幕坏点检测工具——“苹果笔记本屏幕坏点检测,mac ios系统专用”。 这款软件的最大特点在于其专为macOS和iOS操作系统定制,这使得它能够更高效地在苹果设备上运行,并且能够针对苹果笔记本独有的显示特性进行优化检测。 软件的“小巧可以放在U盘里”设计,使得它具有极高的便携性,用户可以轻松将其存放在U盘等移动存储设备中,随身携带。 这一设计的实用之处在于,无论是在官方苹果店还是在第三方零售商店购买新机时,用户都可以立刻拿出这款软件进行现场屏幕检验。 通过直观的检测结果,用户能够立即判断出所购买的笔记本屏幕是否存在坏点问题,从而在付款前做出更加明智的决定,避免了因屏幕质量问题带来的退换货麻烦,保障了自己的权益。 根据描述中的信息,这款软件可能为“PiXel Check V1.2”,而版本号“V1.2”表明这款软件已经历过一定时期的改进与发展。 在使用过程中,它可能通过展示不同的颜色模式(如纯黑、纯白、红色、绿色、蓝色等)来检测屏幕上可能存在的坏点。 这些颜色模式能够帮助用户更清晰地发现屏幕上的亮点、暗点或色斑,即永久显示某种颜色的像素、始终不亮的像素或是颜色显示异常的像素点。 用户只需根据软件提供的...

87,990

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧