javascript - 如何将 'callbacks' 数组参数传递给匿名函数?

标签 javascript jquery closures

我在对象中有一个成员函数,它获取回调函数数组以及设置该函数的事件名称:

...
setHandlesByList: function (list) {
    for (var i in list) {
        var self = this;
        $(document).on(list[i].name, function (e) {
            list[i].callBack.call(self,e)
        });
    };
},
...

在子对象中的某个位置,我调用了父对象的此函数:

...
initClass: function () {
    this.setHandlesByList([
     { name: 'configChecked', callBack: onConfigChecked },
     { name: 'configExpired', callBack: onConfigExpired },
    ]);
},
onConfigChecked: function() {
    // some code
},
onConfigExpired: function() {
    // some code
},
....

但是出了问题 - 对于所有事件,处理程序都是最后设置的回调函数...

最佳答案

尝试以下操作:

setHandlesByList: function (list) {
    for ( var i = 0; i < list.length; i++ ) {
        addCallback(list[i].name, list[i].callback);
    }
    function addCallback(on, name, callback) {
        $(document).on(name, function(e) { callback.call(on, e); });
    }
},

您的范围界定存在问题,因为在评估回调时,i 的值最终会成为 i 的最后一个值。

另请注意,您可以使用list.forEach

关于javascript - 如何将 'callbacks' 数组参数传递给匿名函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19414140/

相关文章:

javascript - Javascript 中 for 循环内的闭包结果令人困惑

javascript - 如何使用 jquery 获取当前数据属性值?

javascript - jquery 动画一个 div 到中心

javascript - 获取 AJAX 调用的进度以在 Rails 中获取 JSON

JavaScript : Use of closure variable

rust - 如何在 Rust 中为函数添加状态

javascript - 移动到悬停内容时保持悬停

javascript - Greasemonkey 代码将 Youtube iFrame 放入剧透中

javascript - angularjs if/else if/else (switch) 条件

jquery - WordPress 固定链接