重複の可能性:
ループ内の Javascript クロージャー - 簡単な実用例
最近、私は JavaScript のより複雑な側面のいくつかをいじっています。その 1 つはデザイン パターンと委譲です。
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(); });
さらに情報が必要ですか?コメントを残してください。乾杯