使用Object构造函数的Javascript回调

时间:2014-03-04 06:41:54

标签: javascript callback

以下是一个创建和反对并调用回调的函数(不是确切的代码,但类似的东西)。

myObject = function(callback){

    var tmpThis = this;
    this.accounts = [];
    tmpThis.accounts[0] = 1;
    tmpThis.accounts[1] = 2;
    callback();
}

function caller(){
    var newMyObject = new myObject(function() {
        alert(newMyObject.accounts[1]);
    }); 
}

newMyObject在回调函数中未定义。有没有办法可以访问它。我读过类似的问题,但没有一个能解释原因。

我可以通过将第二个参数中创建的对象传回回调函数来修复它。但我认为这是一种黑客而不是正确的方式。

4 个答案:

答案 0 :(得分:0)

newMyObject不知道传递给它的参数内部newMyObject。它将是未定义的。

换句话说,当alert(newMyObject.accounts[1]);运行时,newMyObject定义的new myObject将不存在。

当语句newMyObject执行时,

callback();将被取消定义,该语句运行以下代码:

function() {
  alert(newMyObject.accounts[1]);
}

您的回调函数正在传递到myObject函数中。您可以在myObject函数中alert(accounts[1])

您尝试使用的模式通常不会进行函数回调。通常你会传递一个选项对象,用于自定义myObject

目前尚不清楚你要做什么。

答案 1 :(得分:0)

您可以使用this在新创建对象的上下文中访问回调,并使用call来调用回调。

myObject = function(callback){

    var tmpThis = this;
    this.accounts = [];
    tmpThis.accounts[0] = 1;
    tmpThis.accounts[1] = 2;
    callback.call(this);
}

function caller(){
    var newMyObject = new myObject(function() {
        alert(this.accounts[1]);
    }); 
}

答案 2 :(得分:0)

你可以试试这个:

 function Application () {

    var self = this;

    myObject = function(callback){

        var tmpThis = this;
        this.accounts = [];
        tmpThis.accounts[0] = 1;
        tmpThis.accounts[1] = 2;
        callback();
    };

    function caller(){
        self.newMyObject = new myObject(function() {
            alert(self.newMyObject.accounts[1]);
        }); 
    }
}

答案 3 :(得分:0)

电话尚未结束。将其设置为在下一个周期中运行:

http://fiddle.jshell.net/gWUD9/

myObject = function(callback){

    var tmpThis = this;
    tmpThis.accounts = [];
    tmpThis.accounts[0] = 1;
    tmpThis.accounts[1] = 2;
    setTimeout(callback,1);
}

    var newMyObject = new myObject(function() {
        alert(newMyObject.accounts[0]);
    });