Как обезопасить функцию, объявленную внутри другой функции - PullRequest
0 голосов
/ 08 января 2020

Скажите, у меня есть следующий код:

window.foo = function() {
  bar();
  function bar() {
    console.log('hello');
  }
}
/* insert monkey-patching code here */
foo();

На какой код можно заменить /* insert monkey-patching code here */, чтобы сделать это, например, напишите goodbye вместо hello на консоли?

Я попробовал следующее, чтобы переопределить bar, но это не работает:

window.foo = function() {
  bar();
  function bar() {
    console.log('hello');
  }
}
window.bar = function() {
  console.log('goodbye');
}
window.foo.bar = function() {
  console.log('goodbye');
}
foo();

1 Ответ

5 голосов
/ 08 января 2020

Вы не можете.

Функция хранится в локальной переменной внутри foo. Эта функция недоступна извне.

Вам потребуется:

  • Заменить все foo
  • Refactor foo, так что bar был объявлен в более широкой области (и доступен там, где вы хотите его изменить)
...