我在javascript中有一个类结构,我试图使用传入的函数名调用兄弟函数。
这很难解释所以让我告诉你一个我想要完成的例子。
function windowFactory(){
this.init = function(functionName,args[]){
SetTimeout(functionName(args),2000)
}
this.func1 = function(var1){
alert(var1);
}
this.func2 = function(var1, var2){
alert(var1+var2);
}
}
var win1 = new windowFactory();
win1.init("func1","hello");
var win2 = new windowFactory();
win2.init("func2","world","!");
请注意,这只是一个演示功能,包括语法错误/拼写错误 现在,当我在课外时,我使用了一个可怕的Eval ......
eval(funcName+"('"+darray[1]+"','"+darray[2]+"')");
它只需要它在Class之外并传递参数的伪值
答案 0 :(得分:1)
这样的事情可以解决问题:
var windowFactory = function() {
var self = this;
this.init = function(functionName){
var args = Array.prototype.slice.call(arguments, 1);
setTimeout(function() {
self[functionName].apply(self, args);
}, 2000);
};
this.func1 = function(var1){
alert(var1);
};
this.func2 = function(var1, var2){
alert(var1+var2);
};
};
var win1 = new windowFactory();
win1.init("func1","hello");
var win2 = new windowFactory();
win2.init("func2","world","!");
请注意自定义自引用var self = this;
。这是因为当调用超时函数时,this
对象将是window
(至少在Web浏览器中)。
另一个澄清:要解决JavaScript中的特定对象属性,您可以通过以下方式进行:
object.property; // Or
object['property']; // When you have a string literal, like in your example