Javascript超时抓不到class中的值

Javascript timeout can't catch the value in class

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?!@@  

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";
}

在实例化 class 时设置 field1。字段 1 不是常量。

在控制台中尝试:

MyClass.field1 -> /*undefined*/

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

setInterval()函数接收一个函数:

setTimeout(mc.print, 10);

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