我们说我有这些功能:
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将始终执行冷却时间我发作了。
我不知道它是否更清晰,这是一个架构问题,但我现在需要快速修复,这就是为什么我的问题。
谢谢你的时间^^
答案 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;