Ваша pullData()
функция на самом деле ничего не возвращает явно, поэтому ее возвращение не определено - это означает, что то, что вы видите, когда вы регистрируете obj.value2, является правильным (хотя и нежелательным).
Внутри pullData()
вы вызываете $.getJSON()
и передаете ей анонимную функцию в качестве обратного вызова, и именно эта анонимная функция возвращает data
, но возврат никуда не идет, потому что вызов ajax является асинхронным, и обратный вызов не происходит до тех пор, покапозже.
Вы можете попробовать это:
function Aclass(classInitialisedCallback){
var self = this;
this.value1 = "a first value";
this.value2 = "not available yet";
$.getJSON("data.json",function(data){
self.value2 = data;
if (typeof classInitialisedCallback === "function")
classInitialisedCallback(self);
});
}
var obj = new Aclass(function(newInstance) {
// can use obj or newInstance to refer to the object
console.log(obj.value1);
console.log(newInstance.value2);
});
То есть, настройте ваш конструктор Aclass()
так, чтобы он принимал параметр, который является функцией обратного вызова, которая будет выполнена, когда класс будет готов,то есть после того, как результат из $.getJSON()
доступен.