如何猴子修补在另一个函数内声明的函数
How to monkey-patch a function declared inside another function
假设我有以下代码:
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();
你不能。
该函数存储在 foo
内的局部变量中。无法从该函数外部访问它。
您需要:
- 替换整个
foo
- 重构
foo
以便 bar
在更广泛的范围内声明(并且可以从您想要更改它的地方访问)
假设我有以下代码:
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();
你不能。
该函数存储在 foo
内的局部变量中。无法从该函数外部访问它。
您需要:
- 替换整个
foo
- 重构
foo
以便bar
在更广泛的范围内声明(并且可以从您想要更改它的地方访问)