javascript绑定回调到任何函数

时间:2017-07-27 21:55:13

标签: javascript callback bind

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

有一个类似的问题(没有任何有效答案):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是一个概念性术语,也许您认为这类似于chaintrigger甚至是另一个术语。

但导入是第二个函数或回调,在我的示例中easyCallback()必须以某种方式连接到第一个函数doSomething()

每次调用或执行doSomething()时,我都希望easyCallback()在第一次完成后执行。

但没有“包裹”它们或不重写第一个。

1 个答案:

答案 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);