我想在javascript中注入代码,用于调试目的,在javascript中的每个我的方法原型中。此示例仅显示一个类,但假设我有数百个类,每个类有几十个方法。此机制应在原型级别执行,而无需指定每个类/方法名称。
function MyClass1() {
this.attrib = "ABC";
}
MyClass1.prototype.myMethod = function() {
alert("first row"); // <---- THE INJECTION SHOULD OCCUR BEFORE THIS LINE OF CODE
}
想法是在第一次加载/执行javascript代码期间,在myMethod()的第一行之前动态注入一些代码。如:
MyClass1.prototype.myMethod = function() {
alert("I was injected dynamically");
alert("first row");
}
因此,对于其他所有类和方法,同样应该发生。这可以使用Function.prototype方法实现吗?
答案 0 :(得分:9)
只需包装你的方法。这是标准方法:
MyClass1.prototype.myMethod = function() {
alert("first row");
}
然后包装它:
var orig = MyClass1.prototype.myMethod;
MyClass1.prototype.myMethod = function() {
alert('Injected');
return orig.apply(this, arguments);
}
你问了两个问题,我只回答了其中一个问题(即如何包装一个函数)。另一部分 - 如何在许多功能上执行此操作 - 最好使用专用库。实际上,这可以使用Aspect Oriented Programming (AOP)来完成。我找到了几个提供此功能的JavaScript库,其中一个是Aop.js(尝试使用google搜索更多信息)。