我想将回调/函数绑定或链接到另一个函数。
有一个类似的问题(没有任何有效答案):jQuery , bind a callback to any function
但是,对我来说,我不想仅限于jQuery领域。 我在寻找更广泛的答案,我想知道除了jQuery之外是否可以使用vanilla javascript或库。
示例:
// a function which I don't want or I can't edit it's body
var thirdPartyObject = {
doSomething: function(args) {
// a lot of code
console.log('doing stuff: ' + args);
}
};
// my function
var easyCallback = function() {
// processing stuff
console.log('doing more stuff');
}
// the bind
magicLibrary.bind(thirdPartyObject.doSomething, easyCallback);
// run
thirdPartyObject.doSomething(1);
thirdPartyObject.doSomething(10);
当我运行此“代码”时,以下输出表示我正在寻找的行为:
doing stuff: 1
doing more stuff
doing stuff: 10
doing more stuff
有可能吗?
编辑:bind
是一个概念性术语,也许您认为这类似于chain
,trigger
甚至是另一个术语。
但导入是第二个函数或回调,在我的示例中easyCallback()
必须以某种方式连接到第一个函数doSomething()
。
每次调用或执行doSomething()
时,我都希望easyCallback()
在第一次完成后执行。
但没有“包裹”它们或不重写第一个。
答案 0 :(得分:5)
您必须将doSomething
函数包含在另一个函数中,如下所示:
// a function which I don't want or I can't edit it's body
var thirdPartyObject = {
doSomething: function(args) {
// a lot of code
console.log('doing stuff: ' + args);
}
};
// my function
var easyCallback = function() {
// processing stuff
console.log('doing more stuff');
}
// the bind
// magicLibrary.bind(thirdPartyObject.doSomething, easyCallback);
const doSomething = thirdPartyObject.doSomething.bind(thirdPartyObject);
thirdPartyObject.doSomething = function(args) {
doSomething(args);
easyCallback(args);
};
// run
thirdPartyObject.doSomething(1);
thirdPartyObject.doSomething(10);