オブジェクトの配列にも接続されている HTML 要素を生成するオブジェクトがあり、そのインスタンスが 1 つあるとします。そのため、要素を作成するときに、要素のネストされた部分 (uploadDelete であるクラス) に次のイベント リスナーも割り当てます。
ここで、このイベント リスナーは、作成時に割り当てられた i の値を使用して、それを作成したオブジェクトのインスタンスの delete メソッドを呼び出す必要があります。イベントは Window の下にあるため、インスタンスを i 値とともに無名関数に渡す必要がありました。
したがって、これは非常にユニークな機能をイベントに割り当てます。delete メソッドはリスナーを含む要素を破棄するため、最初に削除したいと思います。私が読んだことから、そうでなければリークを引き起こす可能性があります(?)。私も厳密モードを使用しているため、arguments.callee は使用しません。
file.display.getElementsByClassName('uploadDelete')[0].addEventListener('click',
(function(that,i){
return function() {
that.delete(i);
};
})(this,i), false);
私はさまざまなことを試しましたが、リスナーで呼び出される関数内の関数内に匿名関数を持ち始めたとき、ここで質問する必要があると考えました。他のコードを変更することで全体的な問題を解決できるかもしれませんが、これに答えることができればまだ役に立ちます。
これが、Norguardの答えの助けを借りて、私がやったことです。一意性は file というオブジェクトに由来するため、関数を格納するために file の新しいプロパティを作成しました。
file.deleteFunction = (function(that,i){
return function() {
that.delete(i);
};
})(this,i);
file.display.getElementsByClassName('uploadDelete')[0].addEventListener('click',file.deleteFunction, false);
次に呼び出される削除関数は、イベント リスナーを削除します。