Javascript超时无法捕获类中的值

时间:2017-02-10 02:15:19

标签: javascript timeout

function MyClass(){
  this.field1 = "Field in MyClass";
}

MyClass.prototype.print = function() {
  console.log("print in MyClass:" + this.field1);
}

function useMyClassPrint() {
  var mc = new MyClass();
  mc.print(); 
  setTimeout(mc.print, 10);
  setTimeout("mc.print()", 10);
}

我得到了这些结果:

mc.print(); // this one is easy, it returns "print in MyClass:Field in MyClass"  
// but ...  
setTimeout(mc.print, 10); // "print in MyClass:undefined" why?!  
setTimeout("mc.print()", 10); // runtime error?!@@  

1 个答案:

答案 0 :(得分:0)



function MyClass(){
  this.field1 = "Field in MyClass";
}

MyClass.prototype.print = function() {
  console.log("print in MyClass:" + this.field1);
}

  var mc = new MyClass();
  mc.print(); /*ok*/
  setTimeout(mc.print, 10); /*it's just a reference to function*/
  setTimeout(mc.print.bind(mc),10);/*binded*/




定义时

function MyClass(){
  this.field1 = "Field in MyClass";
}

在实例化类时会设置field1。字段1不是常数。

试试控制台:

MyClass.field1 -> /*undefined*/

new MyClass().field1 -> /*Field in MyClass*/

setInterval()函数接收函数:

setTimeout(mc.print, 10);

mc.print只是对函数的引用,没有引用你的" mc"实例