繁体   English   中英

将功能传递给其他原型

[英]Passing function to other prototype

我有下面的代码

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

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

这有效:

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

我认为这就是您的意思。 如果不是,请弄清楚什么不是打印。

这是行不通的,因为它只是一个参考-分配。

  callback: myCallback

这就是执行它的原因

所以:

callback: myCallback.callback;

然后:

this.callback();

如果我不够简洁,我深表歉意。 我希望我能理解您的要求。

似乎您想这样做(使用op.callback作为function):

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

和函数应使用()调用

 } else {
        this.callback();
  }

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

这是可以使用它的示例

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM