在这个例子中
class Car {
describe() {
console.log("I have " + this.wheels);
}
testMe() {
setTimeout( this.describe, 1000);
}
constructor(wheels) {
this.wheels = wheels;
}
}
let myCar = new Car(4);
myCar.testMe(); // I have undefined
为什么this
的预期值未在describe
函数内传递?
编辑:你能否确认setTimeout是箭头函数,我不会得到undefined
?
答案 0 :(得分:0)
裸函数引用没有上下文,即使它是作为对象的属性检索的。
在testMe
功能中,您需要:
setTimeout(() => this.describe(), 1000);
或
setTimeout(this.describe.bind(this), 1000);
或
let self = this;
setTimeout(function() {
self.describe();
}, 1000);
当然,最后一个可以写成箭头函数,但如果你这样做,你也可以使用第一个版本,不需要this
的本地副本。
关于你的编辑, 可以只通过this.describe
通过构造函数内部分配的箭头函数来传递describe
,但请注意,这意味着每一个该对象的实例将拥有自己的该函数副本,而不是仅仅是该类的prototype
上的单个副本:
constructor(wheels) {
this.wheels = wheels;
this.describe = () => {
console.log("I have " + this.wheels);
}
}