0

我有以下代码

http://jsfiddle.net/qhoc/SashU/1/

var Callback = function(op) {
    this.callback = op.callback;
}

var Test = function (op) {
  for (var option in op) {
    if (!this[option]) this[option] = op[option];
  }

}

Test.prototype.init = function(bb) {
    console.log('aa = ' + this.aa);
    console.log('bb = ' + bb);

    if (bb < 3) {
        this.init(bb + 1);
    } else {
        this.callback;
    }
}

var finalCallback = function() {
    console.log('this is finalCallback');
}

var myCallback = new Callback({
    callback: finalCallback
});

var myTest = new Test({
    aa: 1,
    callback: myCallback
});

myTest.init(1);

第 19 行根本没有打印'this is finalCallback',因为this.callback;已执行但它没有指向函数。但以下工作:

myTest.init(1);
myCallback.callback();

我猜当传递myCallback给时myTest,它没有传递finalCallback??

有人可以帮助解释这种行为以及如何解决它吗?

4

3 回答 3

1

这有效:

var myTest = new Test({
    aa: 1,
    callback: myCallback.callback()
});

我想这就是你的意思。如果不是,请澄清什么不是打印。

这不起作用,因为它只是一个参考 - 一个作业。

  callback: myCallback

这就是执行它()

所以:

callback: myCallback.callback;

然后:

this.callback();

如果我不够简洁,我深表歉意。我希望我能理解你在问什么。

于 2013-03-01T04:49:46.310 回答
1

似乎你想做这个(使用 op.callback 作为函数):

var Callback = function (op) {
    this.callback = op.callback;
    return this.callback;
};

和函数应该被调用()

 } else {
        this.callback();
  }

http://jsfiddle.net/oceog/SashU/3/

这是可以使用的示例

于 2013-03-01T04:55:29.060 回答
1

正如已经指出的那样,您甚至没有尝试this.callback在第 19 行调用。用括号调用它。

即使那样,它也不起作用。当你这样做时var myTest = new Test({ aa: 1, callback: myCallback });, myCallBack 不是一个函数;它是一个具有属性的对象callback。将第 19 行更改this.callbackthis.callback.callback()调用该函数。第 19 行this.callback是 Callback 的一个实例——一个具有函数属性callback对象。

http://jsfiddle.net/trevordixon/SashU/4/显示了一个工作示例。

于 2013-03-01T05:01:36.650 回答