将功能传递给其他原型

时间:2013-03-01 04:40:09

标签: node.js javascript-framework javascript

我有以下代码

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' AT ALL因为this.callback;已执行但未指向某个功能。但下面的工作原理:

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

我想在将myCallback传递给myTest时,它没有通过finalCallback ??

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

3 个答案:

答案 0 :(得分:1)

这有效:

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

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

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

  callback: myCallback

这就是执行它的原因()

这样:

callback: myCallback.callback;

然后:

this.callback();
如果我不够简洁,我道歉。我希望我理解你的要求。

答案 1 :(得分:1)

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

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

调用

和函数

 } else {
        this.callback();
  }

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

this is example where it can be used

答案 2 :(得分:1)

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

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

http://jsfiddle.net/trevordixon/SashU/4/显示了一个有效的例子。