这个问题在这里已有答案:
在下面的Javascript代码中,第一次从writeData调用saveResult成功而第二次调用没有,请帮忙。
class SimpleClass {
constructor() {
this.ir = "";
}
saveResult(res) {
console.log("entered save result")
this.ir = res;
console.log("value saved is " + this.ir);
console.log("end save result");
}
writeData() {
this.saveResult("abc"); //works fine
var sr = this.saveResult;
sr("abc"); //throws error -> Cannot set property 'ir' of undefined
}
} //end of class
function testLocally() {
var sc = new SimpleClass();
var wr = sc.writeData();
console.log("done");
}
testLocally();
函数获取是基于如何调用它的上下文。当你称之为
this.saveResult("abc")
,函数内部的this
将引用调用它的this
,在你的情况下是类上下文,因为你创建了一个类的实例并从类实例中调用了writeData
方法,导致this
中的writeData
引用类上下文。
但是当你像这样运行它:
var sr = this.saveResult;
sr("abc");
尽管sr
具有对该函数的引用,但它从window
上下文中调用,因此它无法正常工作。您可以使用.call
方法调用它并提供如下上下文:
var sr = this.saveResult;
sr.call(this, "abc");