如何获得"回到之前的this
?为了更好地解释,我创建了这个示例代码:
class MyClass {
constructor(x,y,z) {
this.x = x;
this.y = y;
setTimeout(function () {
this.z = z;
}, 1000);
}
}
var myVariable = new MyClass(10,15,20);
setTimeout(function () {
console.log(myVariable.z);
}, 1500);
问题是最后一条车道应输出20
,但它会给我一个错误。
我理解为什么。 this.z
被this
setTimeout()
理解为myClass
,而myVariable.z
被理解为this
未定义。
如何在myVariable
内设置MyClass
的{{1}}?
答案 0 :(得分:1)
使用带有this
的词汇绑定的ES6箭头功能:
class MyClass {
constructor(x,y,z) {
this.x = x;
this.y = y;
setTimeout(() => {
this.z = z;
}, 1000);
}
}
var myVariable = new MyClass(10,15,20);
setTimeout(function () {
console.log(myVariable.z);
}, 1500);

在箭头函数中使用this
是指周围代码块的this
(也称为静态范围)。
答案 1 :(得分:0)
您的lambda函数(闭包)被异步调用,因此它不会在对象上下文中运行。 但是,您可以在上层上下文中保存引用,并在闭包中使用它。
e.g。 var that = this;
然后that.z = z;