动态函数使用settimeout调用类的函数

时间:2011-06-20 23:13:20

标签: javascript class dynamic


我在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之外并传递参数的伪值

1 个答案:

答案 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