首先:我不知道如何调用每个人,因为我对更多OOP编写javascript的方式很新,所以我会尝试尽可能好地解释一切。
我的问题是我想访问对象内的属性(所以我可以使用this
- 关键字。只要我在对象的范围内,这就可以正常工作。当我走出范围时,我想访问这些属性,而我不再使用this
- 关键字
我的代码:
var Octa = Octa || function () {
this._initialize();
};
Octa.prototype = {
string: 'Foo',
_initialize: function () {
console.log(this.string); //Output: "Foo"
this.othermethod();
}
}
var Octa = new Octa();
但是当我在Octa
方法中使用某个方法时,所以在我不能再使用this
以获取Octa
属性的范围之外,我无法触及Octa
内的属性
例如:
othermethod: function () {
$.ajax({
url: this.globalUrl + 'content/language/lang.' + l + '.php',
data: {
ajax: true
},
dataType: 'json',
success: function (response) {
Octa.lang = response;
}
});
console.log(JSON.stringify(this.lang)); //Output: null, which means Octa.lang wasn't reachable in the ajax success event (the ajax request was successful).
}
有没有办法在其他对象中达到Octa
的范围?或者在jQuery回调中,因为那里出现同样的问题
我希望我的问题是可以理解的,如果没有,我会尝试给予更多的澄清。
答案 0 :(得分:0)
只需返回功能范围内的this
:
...,
someMethod: function () {
var self = this,
ajaxOptions = this.settings.ajaxOptions;
// note we can still refer to 'this' at this level
$.ajax(ajaxOptions).done(this.ajaxDone).fail(this.ajaxFail);
// the function scope changes for the deffered handlers so you can access by reference of 'this' => self
$.ajax(ajaxOptions).done(function(data, status, xhr){
self.ajaxDone(data, status, xhr)
}).fail(function(xhr, status, error){
self.ajaxFail(xhr, status, error);
});
},
ajaxDone: function(data, status, xhr) {},
ajaxFail: function(xhr, status, error) {},
...
希望这是有道理的。
现在还有一个.bind()
函数可用于将函数范围绑定到参数:
$.ajax(ajaxOptions).done(function(){
this.ajaxDone();
}.bind(this));
您必须使用polyfill来支持旧版浏览器。使用var self
imho更容易。