Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript绑定回调到任何函数_Javascript_Callback_Bind - Fatal编程技术网

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

我想将回调/函数绑定或链接到另一个函数

有一个类似的问题没有任何有效的答案:

但是,对我来说,我不想只局限于jQuery领域。 我在寻找一个更广泛的答案,我想知道除了jQuery之外,是否可以使用香草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
可能吗

编辑:绑定是一个概念性术语,也许你认为它像一个链、触发器,甚至是另一个术语

但是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非常感谢你,我已经说过了,虽然你的答案甚至比我的答案更有效,但这并不完全是我想要的,所以我会让这个问题悬而未决。