我想从 require()函数的成功侦听器中访问 foo.settings.debug 对象。我一直得到一个未定义的错误,当我引用“this”时,它最终引用了ajax对象。请协助。
var foo = {
info: {
version: '0.0.1'
},
settings: {
debug: true
},
require: function(script) {
$.ajax({
url: script,
dataType: "script",
async: false,
success: function(){
if(foo.settings.debug) console.log('loaded js file: ' + script);
},
error: function(){
throw new Error("Could not load script " + script);
}
});
}
}
答案 0 :(得分:1)
每个函数都有自己的this
对象上下文。可以使用apply
或其他此类函数更改上下文。
在这种情况下,通过创建匿名函数作为成功回调,您将输入新的上下文。要访问上一个上下文,您需要在上一个上下文中定义一个变量(名称不会被回调函数的参数名称覆盖)。
var foo = {
info: {
version: '0.0.1'
},
settings: {
debug: true
},
require: function(script) {
/* every function has its own 'this' context */
var self = this;
$.ajax({
url: script,
dataType: "script",
async: false,
success: function(){
if(self.settings.debug) console.log('loaded js file: ' + script);
},
error: function(){
throw new Error("Could not load script " + script);
}
});
}
}
答案 1 :(得分:1)
你需要在foo里面引用foo this
,但this
将成为你封闭内的其他东西,所以你需要保持对this
的引用,如此:
require: function(script) {
var self = this;
$.ajax({
url: script,
dataType: "script",
async: false,
success: function(){
if(self.settings.debug) console.log('loaded js file: ' + script);
},
error: function(){
throw new Error("Could not load script " + script);
}
});
}