javascript - 使 JavaScript 方法等待构造函数完成

标签 javascript oop

构造函数需要一些时间,调用该方法时,尚未定义this.folders。如何让 getIt() 等到构造函数完成?

function test() {
    var t=this;
    $.getJSON('~.php?task=getFolders&dummy='+new Date().getTime(), function(returned){
        t.folders=returned;
    });
}
test.prototype.getIt = function() {
    return this.folders;
};

var myObj = new test();
console.log(myObj.getIt());

最佳答案

由于 $.getJSON() 是异步的,因此无法阻止 test()t.folders 被填充后返回.

您可以使用回调:

function test(callback) {
    $.getJSON('~.php?task=getFolders&dummy='+new Date().getTime(), function(returned){
        callback(returned);
    });
}

var myObj = new test(function (folders) {
    console.log(folders);
});

或者一个 promise (在这个例子中,使用 Q 库):

function test() {
    var t = this;
    t.folders = Q.defer();

    $.getJSON('~.php?task=getFolders&dummy='+new Date().getTime(), function(returned){
        t.folders.resolve(returned);
    });
}
test.prototype.getIt = function() {
    return this.folders.promise;
};

var myObj = new test();
myObj.getIt().done(function (folders) {
    console.log(folders);
});

关于javascript - 使 JavaScript 方法等待构造函数完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19466782/

相关文章:

javascript - API key 使用和检查示例?

javascript - jQuery - 动画滚动到部分页面

python - Python 中的元类是什么?

c++ - C++读取图像文件的好方法

c# - 如何在系统中设计两种类型的账户

javascript - 带有 $http.get 的 AngularJS 服务不会将数据传递到 Controller

javascript - V8中,null、undefined、boolean等基本类型在内存中是如何存储的?

javascript - 如何监听两个加载事件?

language-agnostic - 继承还是条件?

java - 从公共(public)静态上下文访问私有(private)静态方法