我对这种行为在某些情况下的表现感到困惑,例如我有这个代码
var makeRequest=function(url,callback){
var data=10;
callback(data);
};
var obj = {
someValue: 20,
loadData: function(data){
var sum = this.someValue + data;
alert(sum);
},
prepareRequest:function(){
var url="http://someurl.com";
makeRequest(url,obj.loadData);
}
};
它会发出请求,并获取一些数据。问题是,当我使用makeRequest
作为参数调用函数obj.loadData
时,它会给出错误。
有人可以解释为什么会这样吗?为什么即使obj.prepareRequest()
方法被loadData
对象攻击,我调用obj
时也不会表现出预期的行为?
我将不胜感激任何帮助。 “这个”关键字实在令人困惑。
答案 0 :(得分:0)
当您将loadData
函数作为参数传递到makeRequest
时,只需考虑切换所有权...... makeRequest
现在拥有 {{1 }}
因此,如果loadData
中使用了this
个关键字,那么它指的是loadData
而不是makeRequest
。
维护所有权或上下文的方法是使用obj
.bind()
不清楚loadData
是什么,因为背景已更改
在this.someValue
函数中添加prepareRequest
,优良做法是将bind
用于oop目的
示例强>
this
希望这有帮助