实例化一个 class 然后将它传递给 setInterval

Instantiating a class and then pass it to setInterval

我有一个疯狂的问题。我正在从 class 中实例化一个对象。然后我想将一个函数从此对象传递给 setInterval 函数。整个代码块通过 keyDown 事件执行。 这是代码:

  function doKeyDown(e){
      var instance = new Class(e.keyCode);
      setInterval(instance.functionToBeExecuded(), 200);
  }

奇怪的是,它被执行一次,然后开始循环一个错误,指出 (firebug): 27

SyntaxError: missing ] after element list


[object HTMLAudioElement]

为了完整起见:

Class.prototype.functionToBeExecuded = function(){
 var node = document.createElement("audio");
 //the key is stored in the object (from the Class's constructor)
 node.setAttribute("key", this.variable);
}

有没有人看到有些失败了?

提前致谢! =)

P.S.: 这不是重复的 因为我没有遇到 function, function() 错误。如果我用 (instance.functionToBeExecuded, 200) 执行它,它什么也不会发生。

到目前为止我发现问题一定在范围内。如果我这样做:

  function doKeyDown(e){
      var instance = new Class(e.keyCode);
      setInterval(instance.functionToBeExecuded, 200);
  }

Class.prototype.functionToBeExecuded = function(){
 console.log(this);
 var node = document.createElement("audio");
 //the key is stored in the object (from the Class's constructor)
 node.setAttribute("key", this.variable);
}

我正在使用 "window" 获得循环控制台输出。所以该函数在 window 的范围内执行。但为什么?以及如何解决?

控制台输出:

Window index.html

解决方法是:使用另一个函数包装它而不是直接调用方法

function doKeyDown(e){
  var instance = new Class(e.keyCode);
  setInterval(function(){
    instance.functionToBeExecuded()
  }, 200);
}

这将给出其中许多输出:

Class {functionToBeExecuded: function}