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

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);
...全文
277 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>

87,910

社区成员

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

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