将功能绑定到另一个功能

时间:2016-02-19 15:47:47

标签: javascript

我们说我有这些功能:

function callA(){
     console.log("A called");
}

function callB(){
     console.log("B called");
}

我的问题是,是否可以将callB绑定到callA而不直接触及那些函数?

我的意思是,每次调用我的代码callA中的某个地方时,callB都会执行。

所以基本上,如果我这样做

callB();

日志将是:

A called
B called

为什么这样?实际上,在代码(不是我的代码)中,有一个从控制器调用的函数。只有控制器可以调用它。

// I'm in the hero scope, i can't have the reference of the UI
this.executeAttack()

在UI组件的其他地方,有一个函数可以开始冷却以显示冷却条。

// I'am in the UI scope, i have a reference on the player.
this.startCooldown();

我现在想做的是

当我创建我的UI时,由于我有英雄的引用,我想将我的函数startCooldown绑定到executeAttack,这样我就不需要修改executeAttack了,我的UI将始终执行冷却时间我发作了。

我不知道它是否更清晰,这是一个架构问题,但我现在需要快速修复,这就是为什么我的问题。

谢谢你的时间^^

4 个答案:

答案 0 :(得分:0)

如果您不想触摸这些功能,请创建另一个功能:

t"e"s"t

答案 1 :(得分:-1)

你可以这样做:

callB(callA())

如果你不想把它放到另一条线上。

答案 2 :(得分:-3)

Javascript允许您通过简单地为同一标识符分配不同的函数来重新定义函数。您可以通过将函数本身分配给临时变量来使用它,然后使用新的匿名函数重新定义它,该函数调用该临时变量和另一个函数:

function callA(){
     console.log("A called");
}

function callB(){
     console.log("B called");
}

// redefine callB
var tempB = callB;
callB = function() {
      callA();
      tempB();
  }
 
// call callB
callB(); // will execute both callA and the "original" callB.

警告:这在以前将callB作为回调或处理程序传递给某个其他函数或对象的情况下不起作用,因为接收器将有一个本地副本,然后指向“原始”callB。

答案 3 :(得分:-4)

功能应该足够了:

function A_and_B(){
    a();
    b();
}

虽然如果你想永远不打电话给没有b,那么你甚至可能不允许自己打电话给没有b,因此在一个类中隐藏一个()。

function AANDB(){
    var a = function() {

    }

    var b = function() {

    }

    this.A_AND_B = function () {
        a();
        b();
    }
}

这样你绝对可以保证永远不会被召唤:

var x = new A_and_B();
x.A_AND_B();//
x.a(); //will give error;
x.b(); //will give error;