6

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

4

1 回答 1

13

只需包装您的方法。这是标准方法:

MyClass1.prototype.myMethod = function() {
    alert("first row");
}

然后包装它:

var orig = MyClass1.prototype.myMethod;
MyClass1.prototype.myMethod = function() {
    alert('Injected');
    return orig.apply(this, arguments);
}

您在问两个问题,而我只回答了其中一个(即如何包装函数)。另一部分 - 如何在许多功能上执行此操作 - 最好使用专门的库来完成。事实上,这可以使用面向方面的编程 (AOP)来完成。我发现了几个提供此功能的 JavaScript 库,其中一个是Aop.js(尝试自己在谷歌上搜索更多内容)。

于 2013-07-06T12:26:13.100 回答