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
它就可以正常工作。有什么想法吗?
答案 0 :(得分: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
个实例。