问一个 javascript 问题

2018-09-12 20:35:41 +08:00
 me15000
比如定义

function a(){};
function b(){};

两个空 function

在不改变原有函数内部代码的情况下
在外部往 a 和 b 里面注入代码,当执行 a 或 b 的时候,会执行新注入的代码


如:想把 console.log(arguments.callee.name) 这段代码注入到 a 和 b 中,该怎么做呢?




a(); //输出 console.log('a');
b(); //输出 console.log('b');

等同于:function a(){ console.log(arguments.callee.name)}
等同于:function b(){ console.log(arguments.callee.name)}

----------------------
自己尝试修改 Function.prototype 包括 Object.prototype 都没实现

遍历所有 function 的方法也想过,这种性能上不行
1352 次点击
所在节点    问与答
4 条回复
rabbbit
2018-09-12 20:43:05 +08:00
function a(){};
let p = new Proxy(a, {
apply(target, object, args) {
console.log(target.name);
return Reflect.apply(target, object, args);
}
})
p() // a
noe132
2018-09-12 20:44:08 +08:00
替换原有函数。

比如
var originAlert = window.alert
window.alert = (...p) => { originAlert(...p); console.log('hi'); }

不过这个有一个问题,就是如果其他地方事先拿到了原函数的引用,而不是通过某一个对象的属性去查找,这个方式是无效的
me15000
2018-09-13 08:38:06 +08:00
@rabbbit
想调用 a() 达到这个效果
me15000
2018-09-13 08:38:48 +08:00
@noe132
上万个方法函数呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/488682

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX