在jQuery函数和其他方法中使用父对象的属性

时间:2015-12-18 12:25:39

标签: javascript jquery object

首先:我不知道如何调用每个人,因为我对更多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回调中,因为那里出现同样的问题 我希望我的问题是可以理解的,如果没有,我会尝试给予更多的澄清。

1 个答案:

答案 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更容易。