0
var MyClass = (function() {    
  function MyClass(m) {
    this.m = m;
  }

  MyClass.prototype.temp = function() {
    process.nextTick(function() {
      console.log(m);
    });
  }
});

for (var i=0; i<3; i++) {
  var t = new MyClass(i);
}

上面的代码总是覆盖在其他实例中初始化的私有变量。它显示 2, 2, 2 而不是 0, 1, 2。这样设置的成员变量是否m正确?

然而,没有process.nextTick. 任何想法?

4

1 回答 1

2

您的代码示例不完整,但是我相信您的真实代码仍然存在以下问题:

process.nextTick(function() {
    console.log(m); //where does the m variable came from?
});

将您的代码更改为:

process.nextTick((function() {
    console.log(this.m);
}).bind(this));

bind用于确保回调this内部的值nextTick是当前MyClass实例。

于 2013-11-04T18:32:03.343 回答