是否可以在调用时将函数绑定到另一个函数?例如,它会是这样的:
function a(){...}
function b(){...}
b.bind("onInvoke","a");
因此,当调用b时,也会自动调用a。
编辑:好的,澄清一下,这不是关于链接的问题。我们的想法是找到一种优雅的方式来进行事件绑定。使用正常的函数回调观察正常的“非优雅”方式:
function handler(){...}
function caller1(){handler(); ...}
function caller2(){handler(); ...}
function caller2(){handler(); ...}
// More callers all over your website everywhere else
这适用吗?但是,如果我到处都有来电者怎么办?组织或改变事物很难。
现在观察卓越的解决方案! (如果存在的话)
function handler(){...}
// Caller make no reference to handler on creation
function caller1(){...}
function caller2(){...}
function caller3(){...}
// Caller function are still all over the place, all over your website
// Event handler registered later in one location here, doesn't matter where they are phsically
caller1.bind("onInvoke",handler);
caller2.bind("onInvoke",handler);
caller3.bind("onInvoke",handler);
非常像普通的HTML - JQuery事件注册。你没有在用户可能点击的每个图像上写上onClick(这些图像遍布整个地方),组织它就太麻烦了!你只需写一个简单的
$("img").bind("onClick",click_handler);
适用于整个网站。除了JS函数之外,这是我要寻找的东西。
我希望澄清事情。
编辑2:需要使用IE7 !!! JavaScript 1.8.5很棒,但是现在还没有任何支持。
答案 0 :(得分:4)
您可以使用面向方面的方法来实现这一目标。 这是一个简单的例子:
将对()的调用附加到函数b():
var _b = b;
b = function(){
_b();
a();
}
现在调用b():
b();
在此处查看此行动:http://jsfiddle.net/eZ9wJ/
答案 1 :(得分:2)
根据您想要建筑多少,有各种解决方案。一种简单而灵活的方法是创建一个链接效用函数:
function chain() {
var args = arguments;
return function() {
// loop through arguments and invoke all functions
for(var i = 0; i < args.length; i++) {
if(typeof args[i] == "function")
args[i]();
}
}
}
这样做是返回一个新函数,它将按顺序调用提供的函数。像这样使用它:
var myChain = chain(b, a);
myChain();
答案 2 :(得分:0)
您可以使用回调:
function a(){
// some code here
b();
}
function b(){...}
答案 3 :(得分:0)
JavaScript 1.8.5 / ECMAScript 5确实定义了bind function,但它没有按照您的描述进行操作;它允许您指定this
上下文调用时的内容,并且可选地允许您对某些参数进行硬编码 - 咖喱。