2012-03-23 2 views
2

Я хотел бы сделать запрос ajax, который все еще сохраняет доступ к текущему объекту. Кто-нибудь знает возможно ли это?Javascript OOP - jQuery, вызывающий «this» внутри ajax-запроса

Пример того, что я хотел бы сделать:

function mobile_as(as_object, inputID) { 
    this.object = 'something'; 
    if (as_object) this.object = as_object; 
    this.inputID = inputID; 

    // Get results for later usage. 
    this.get_results = function(value) { 
      this.request = $.getJSON("URL", { as: this.object }, function (data) { 
       // Scope of "this" is lost since this function is triggered later on. 
       if (data['status'] == "OK") { 
        alert(this.inputID); 
       } 
      }); 
     } 
    } 
} 
+1

FYI JavaScript не ООП. – jrummell

+0

@jrummell Это субъективно, не так ли? http://stackoverflow.com/questions/107464/is-javascript-object-oriented – teynon

+0

Я думаю, что нет, но вы можете не согласиться. – jrummell

ответ

8

Затворы к спасению:

function mobile_as(as_object, inputID) { 
    var self = this; // <--------- 
    this.object = 'something'; 
    if (as_object) this.object = as_object; 
    this.inputID = inputID; 

    // Get results for later usage. 
    this.get_results = function(value) { 
      this.request = $.getJSON("URL", { as: this.object }, function (data) { 
       // Scope of "this" is lost since this function is triggered later on. 
       self.... //self is the old this 
       if (data['status'] == "OK") { 
        alert(self.inputID); 
       } 
      }); 
     } 
    } 
} 
+0

Знаете ли вы, что ли я становится ссылкой или копией? Я сделал это раньше, но я боюсь, если я это сделаю, и фактический объект будет изменен во время запроса, я по существу создам условие гонки. Или с помощью этого создать ссылку? – teynon

+0

Объекты @Tom всегда присваиваются ссылкой в ​​JavaScript. – jnrbsn

+0

'self' является ссылкой. – apsillers

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