2015-02-25 2 views
0

я следующий код:Javascript сфера проблема с объектами (это)

var tradingInterface = function() { 

    this.json = ''; 

    this.init = function() { 

     $.get('/whatever',{}, function(data) { 
      this.json = data; 
      // Rebuilds Everything 
      this.rebuildAll(); 
     }); 
    }; 

    this.rebuildAll = function() { 
     //whatever here 
    }; 

}; 

Почему я получаю в функции инициализации следующую ошибку?

ReferenceError: this.rebuildAll is not defined 
this.rebuildAll(); 

Почему я могу получить доступ к this.json без обзорных проблем, но не this.rebuildAll?

Я написал аналогичный предыдущий поток, но я был перенаправлен на How to access the correct `this`/context inside a callback?, но я не могу заставить его работать правильно.

Как THW нить suggets, я попытался с:

var tradingInterface = function() { 

    this.json = ''; 
    var self = this; 
    this.init = function() { 

     $.get('/whatever',{}, function(data) { 
      this.json = data; 
      // Rebuilds Everything 
      self.rebuildAll(); 
     }); 
    }; 

    this.rebuildAll = function() { 
     //whatever here 
    }; 

}; 

ошибка исчезает, но функция rebuildAll не делает то, что он должен ...

мне нужна помощь ...

С уважением,

+0

* "Почему я могу получить доступ к this.json без обзорных проблем, но не this.rebuildAll?" * Вы ** назначение ** в 'this.json'. Вы всегда можете назначить свойство объекту (почти всегда). Однако вы ** читаете ** 'this.rebuildAll' и пытаетесь назвать его функцией. Поскольку 'this.rebuildAll' является' undefined', вы не можете его вызывать. * Присвоение * 'this.rebuildAll' будет работать отлично (хотя, конечно, это не то, что вы хотели сделать):' this.rebuildAll = 42; '. –

+0

Вы серьезный человек? Я написал в своем потоке, что я уже прочитал этот поток, и это меня не помогло, прочитал то, что я написал первым, и не закончил в заголовке ... – Egidi

+0

Вы получаете ошибку, потому что 'this' в функции ссылается на объект' window' и не имеет метода 'rebuildAll'. –

ответ

3

Ошибка исчезла, но rebuilAll функция не делает то, что она должна ...

Вы не объясняете, что rebuildAll должен делать, поэтому я могу только предположить, что проблема в том, что вы не заменили

this.json = data; 

с

self.json = data; 

внутри $.get обратный вызов, this относится к другому объекту, чем self. Все это объясняется в question/answer you linked to.


Почему я могу получить доступ к this.json без обзорных проблем, но не this.rebuildAll?

Вы назначая к this.json. Вы можете (почти) всегда назначать свойство объекту. Тем не менее, вы читаете this.rebuildAll и попробуйте назвать его функцией. Поскольку this.rebuildAll - undefined, вы не можете позвонить.

Упрощенный пример:

var obj = {}; 
obj.foo = 42; // works, foo didn't exist before 
obj.bar = function() {}; // works, bar didn't exist before 

obj.bar(); // works because bar exists 
obj.baz(); // doesn't work, because baz doesn't exist 
Смежные вопросы