javascript - 如何对另一个函数内声明的函数进行猴子修补

标签 javascript monkeypatching

假设我有以下代码:

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

我可以用什么代码替换 /* 在此处插入猴子修补代码 */ 以使此例如在控制台上写 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();

最佳答案

你不能。

该函数存储在foo内的局部变量中。无法从该函数外部访问它。

您需要:

  • 替换整个foo
  • 重构 foo,以便在更广泛的范围内声明 bar(并且可以从您想要更改它的位置进行访问)

关于javascript - 如何对另一个函数内声明的函数进行猴子修补,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59647878/

相关文章:

javascript - 防止使用箭头键滚动

python - 是否有与 Swift 的 @dynamicMemberLookup 等效的 Python?

python-3.x - Monkeypatching 一个 Python 类

javascript - Nuxt - 具有多个请求的异步数据

javascript - 尝试删除实体时出现 Breeze 错误

python - 如何修补 shutil.move 以测试某些方法

python - python 中的猴子修补 : When we need it?

ruby-on-rails - 如何在Ruby on Rails中修补猴子?

javascript - 无法设置未定义的属性(输入 [文本] 值)

javascript - 将字符串转换为数字时javascript中的意外输出