javascript绑定回调到任何函数
我想将回调/函数绑定或链接到另一个函数 有一个类似的问题没有任何有效的答案: 但是,对我来说,我不想只局限于jQuery领域。 我在寻找一个更广泛的答案,我想知道除了jQuery之外,是否可以使用香草javascript或库 例如:javascript绑定回调到任何函数,javascript,callback,bind,Javascript,Callback,Bind,我想将回调/函数绑定或链接到另一个函数 有一个类似的问题没有任何有效的答案: 但是,对我来说,我不想只局限于jQuery领域。 我在寻找一个更广泛的答案,我想知道除了jQuery之外,是否可以使用香草javascript或库 例如: // a function which I don't want or I can't edit it's body var thirdPartyObject = { doSomething: function(args) { // a lo
// 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
可能吗
编辑:绑定是一个概念性术语,也许你认为它像一个链、触发器,甚至是另一个术语
但是import是第二个函数或回调,在我的示例中是easyCallback,它必须以某种方式连接到第一个doSomething
每次调用或执行doSomething时,我希望easyCallback也在第一次完成后执行
但是,如果不将它们环绕或不重写第一个函数,则必须将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);
您必须将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);
只需定义一个函数,调用其中一个,然后调用另一个var callsBoth=function{myEasyCallbackthirdParty.something;};这不是bind或chain,而是包装函数,但我很欣赏你的建议;这不是束缚或束缚,而是包装函数,但我感谢你的建议。@Jasmshid Asadzadeh谢谢你的回答。虽然它适用于这个通用的例子,但并不是我想象的那样。因为这会将函数的原始版本绑定到对象thirdPartyObject,然后在新引用上创建它的快照,最后重写doSomething函数,我们在其中包装函数。@PauloOliveira请描述您想要的,exactly@JasmshidAsadzadeh我道歉我编辑了这篇文章,我尽了最大努力解释,如果仍然缺少信息或变得更加混乱,请警告我。我估计你所花的时间@PauloOliveira我认为你做这件事的唯一方法就是把药包起来function@Jasmshid阿萨扎德非常感谢,我已经说过了,虽然你的答案比我的答案更有效,但这并不完全是我想要的,所以我会让这个问题解决。@Jasmshid Asadzade感谢你的回答。虽然它适用于这个通用的例子,但并不是我想象的那样。因为这会将函数的原始版本绑定到对象thirdPartyObject,然后在新引用上创建它的快照,最后重写doSomething函数,我们在其中包装函数。@PauloOliveira请描述您想要的,exactly@JasmshidAsadzadeh我道歉我编辑了这篇文章,我尽了最大努力解释,如果仍然缺少信息或变得更加混乱,请警告我。我估计你所花的时间@PauloOliveira我认为你做这件事的唯一方法就是把药包起来function@Jasmshid非常感谢你,我已经说过了,虽然你的答案甚至比我的答案更有效,但这并不完全是我想要的,所以我会让这个问题悬而未决。