Добавить в функцию JavaScript - PullRequest
21 голосов
/ 02 ноября 2009

У меня есть функция, которую я не могу изменить:

function addToMe() { doStuff(); }

Можно ли добавить эту функцию? Очевидно, что этот синтаксис ужасно неправильн, но это общая идея ...

function addToMe() { addToMe() + doOtherStuff(); }

1 Ответ

41 голосов
/ 02 ноября 2009

Вы можете сохранить ссылку на исходную функцию, а затем переопределить ее функцией, которая вызывает исходную функцию и добавляет желаемую функциональность:

var originalFn = addToMe;

addToMe = function () {
  originalFn(); // call the original function
  // other stuff
};

Вы можете сделать это, потому что JavaScript функции являются первоклассными объектами.

Редактировать: Если ваша функция получает аргументы, вы должны использовать apply для передачи их в исходную функцию :

addToMe = function () {
  originalFn.apply(this, arguments); // preserve the arguments
  // other stuff
};

Вы также можете использовать выражение автозапуска функции с аргументом для хранения ссылки на исходную функцию, я думаю, что это немного чище:

addToMe = (function (originalFn) {
  return function () {
    originalFn.apply(originalFn, arguments); // call the original function
    // other stuff
  };
})(addToMe); // pass the reference of the original function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...