2015-12-18 2 views
0

Прежде всего: я не знаю точно, как вызвать everyting, так как я совершенно новичок в более OOP-способе написания javascript, поэтому я попытаюсь объяснить все как хорошо насколько возможно.Использование свойств родительского объекта внутри функции jQuery и других методов

Моя проблема заключается в том, что я хочу получить доступ к свойствам внутри объекта (поэтому я могу использовать ключевое слово 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

Возможный дубликат [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/questions/14220321/how-do-return-the-response-from-an-asynchronous- звонок) – Grundy

+0

$ .ajax был всего лишь примером. Неважно, что я использую, когда я выхожу за пределы «Окта», я не могу дотянуться до него. Но я все равно прочту другой пост. Благодаря! – Galago

+0

_ $. Ajax был всего лишь примером. Я бы порекомендовал вам удалить '$ .ajax', поскольку на первый взгляд вопрос подходит для закрытия как обман. – Satpal

ответ

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 имхо.

+0

Поскольку я не знал о методе bind(), и это может быть очень полезно в будущем, я даю вам кредиты на мой вопрос. – Galago

Смежные вопросы