我在对象中有一个成员函数,它获取回调函数数组以及设置该函数的事件名称:
...
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/