У меня есть несколько методов, которые мне нужно обернуть в новые методы в основном таким же образом. Мое первое решение не работает, и я понимаю, почему, но я не знаю, есть ли простое решение этой проблемы или его нельзя сделать так, как я хочу.
Вот пример. У меня есть объекты a-c, которые имеют метод onClick. Мне нужно выполнить некоторый код перед методами 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, когда он был назначен.
Есть ли простое решение, которое я пропускаю?