在下面的Java代码中,第一次成功调用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();
答案 0 :(得分:1)
函数get是基于其调用方式的上下文。像这样
this.saveResult("abc")
,函数内的this
将引用调用它的this
,在您的情况下,这是类上下文,因为您创建了类的实例并调用了{{1 }}类实例中的方法导致writeData
内部的this
引用类上下文。
但是,当您像这样运行它时:
writeData
尽管var sr = this.saveResult;
sr("abc");
引用了该函数,但它是从sr
上下文调用的,因此无法正常工作。您可以使用window
方法调用它,并提供如下上下文:
.call