Javascript无法从使用此函数调用的方法设置属性

Javascript无法从使用此函数调用的方法设置属性,javascript,this,Javascript,This,在下面的Javascript代码中,从writeData对saveResult的第一次调用成功,而第二次调用没有成功,请帮助 类SimpleClass{ 构造函数(){ this.ir=“”; } 保存结果(res){ console.log(“输入保存结果”) this.ir=res; log(“保存的值为”+this.ir); console.log(“结束保存结果”); } 写入数据(){ 这个.saveResult(“abc”);//工作正常 var sr=this.saveResul

在下面的Javascript代码中,从writeData对saveResult的第一次调用成功,而第二次调用没有成功,请帮助

类SimpleClass{
构造函数(){
this.ir=“”;
}
保存结果(res){
console.log(“输入保存结果”)
this.ir=res;
log(“保存的值为”+this.ir);
console.log(“结束保存结果”);
}
写入数据(){
这个.saveResult(“abc”);//工作正常
var sr=this.saveResult;
sr(“abc”);//抛出错误->无法设置未定义的属性“ir”
}
}//下课
函数testLocally(){
var sc=新的SimpleClass();
var wr=sc.writeData();
控制台日志(“完成”);
}

testlocal()函数根据调用方式获取上下文。当你这样称呼它的时候

this.saveResult(“abc”)
this
函数内部将引用调用它的
this
,在您的例子中,这是类上下文,因为您创建了类的实例并从类实例调用了
writeData
方法,从而导致
this
内部
writeData
引用类上下文

但是,当您这样运行它时:

var sr = this.saveResult;
sr("abc"); 
var sr = this.saveResult;
sr.call(this, "abc");
尽管
sr
引用了该函数,但它是从
窗口
上下文调用的,因此不能正常工作。您可以使用
.call
方法调用它,并提供如下上下文:

var sr = this.saveResult;
sr("abc"); 
var sr = this.saveResult;
sr.call(this, "abc");

当您将函数设置为变量时,您正在丢失词法范围。this.saveResult在构造函数中的位置?顺便说一句,如果您这样做,
sr.bind(this)(“abc”)
将起作用,因为您正在为函数设置上下文。谢谢Ele,我理解我遗漏了上下文,这可以通过您建议的方式传递,也可以通过下面使用
sr.call(这是“abc”)的回答中描述的方式传递重复问题!!嗨,Ele,谢谢你将这两个问题联系起来,但这个问题是从根本原因开始的,这两个问题的根本原因是一样的。我认为这个问题对于任何试图理解另一个问题中所描述的问题的人来说都是一个非常有用的例子,因此,除非有人已经知道问题背后的原因,否则很难单独借助另一个问题来找出原因。因此,我认为这个问题不应因为根本原因是相同的,而被标记为与另一个问题重复。