基本的に同じ方法で新しいメソッドにラップする必要があるメソッドがいくつかあります。私の最初の解決策は機能せず、その理由は理解できますが、この問題に対する簡単な解決策があるのか、それとも私が望む方法で解決できないのかはわかりません。
これが例です。onClickメソッドを持つオブジェクトacがあります。onClickメソッドの前にいくつかのコードを実行する必要があります。私は次のことを試しました:
// objects a-c
a = {onClick : function () { console.log('a'); }};
b = {onClick : function () { console.log('b'); }};
c = {onClick : function () { console.log('c'); }};
// first try
var arr = [a, b, c]
for (var i = 0; i < arr.length; i++) {
var oldOnClick = arr[i].onClick;
arr[i].onClick = function () {
// new code here
oldOnClick();
}
}
// outputs 'c'
// what i want is to maintain a reference to the original method
// so in this case, execute my new code and output 'a'
a.onClick();
新しいメソッドが呼び出されると、oldOnClickは、割り当てられたときのtoメソッドではなく、最後の反復からのメソッドを指すため、これは機能しません。
私が見落としている簡単な解決策はありますか?