Я не уверен, почему CASE 1 сработал для вас, но ваша проблема, кажется, заключается здесь:
$.getJSON('someurl', function(data)
{
alert(core === this); // <----- false, 'this' refers to the function's scope
for(key in this.all)
alert(key);
});
«this» в javascript не совпадает с «this»в C ++ или Java
Проблема в том, что function(data){...}
создает замыкание (с новым this).Таким образом, внутри этой функции this
больше не ссылается на core
, оно относится к области контекста, из которого она была вызвана (где-то внутри jQuery в данном случае).Вы можете исправить это, защитив this
с помощью новой переменной, например, так.
var self = this;
$.getJSON('someurl', function(data) {
for(var key in self.all){
alert(key);
}
});
Этот вопрос может указать вам правильное направление для демистификацииthis
ключевое слово в javascript.