最近我一直在研究 JavaScript 的一些更复杂的方面,其中之一就是设计模式和委托。
我创建了一个包含 2 个键的对象,然后我对其进行解析并将一个事件附加到主体上。
我的问题是,对于 for 循环的任何迭代,似乎都附加了最后一个函数。我很确定这是通过引用/范围界定(感谢 Shmiddty)问题的副本,但如果我错了,请纠正我。
无论如何要解决我的问题以正确附加 2 个事件而不进行太多更改?(因为这是一个复杂的应用程序,我已将其简化为手头的问题)。
在jsfiddle 示例中,请查看警报消息.div1
与.div2
var foo = {
init: function() {
var i = 0,
keys = []
self = this;
for (var key in this) {
keys.push(key);
}
for (i; i < keys.length; i++) {
if (keys[i].match(/^on/i)) {
var delegateFunc = keys[i].split(' | '),
event = delegateFunc[2],
selector = delegateFunc[1],
keyName = keys[i];
console.log('###');
console.log( 'selector: ' + selector );
console.log( 'event: ' + event );
console.log( 'function: ' + self[keyName] );
$('body').on(event, selector, function(ev) {
self[keyName](ev, ev.target);
});
}
}
},
'on | .div1 | click': function(ev, el) {
alert('you clicked 1');
},
'on | .div2 | click': function(ev, el) {
alert('you clicked 2');
}
}
$(function() { foo.init(); });
需要更多信息吗?给我留言。干杯