如何将javascript代码注入每个原型方法的开头?

时间:2013-07-06 12:22:29

标签: javascript

我想在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方法实现吗?

1 个答案:

答案 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搜索更多信息)。