javascript - 如何在每个原型(prototype)方法的开头注入(inject) javascript 代码?

标签 javascript

出于调试目的,我想在 内注入(inject) javascript 代码每一个我在 javascript 中的方法原型(prototype)。此示例仅显示一个类,但 假设我有数百个类,每个类有几十个方法 .这种机制应该在原型(prototype)级别执行,而不需要指定每个类/方法名称。

function MyClass1() {
    this.attrib = "ABC";
}

MyClass1.prototype.myMethod = function() {
   alert("first row");  // <---- THE INJECTION SHOULD OCCUR BEFORE THIS LINE OF CODE
}

这个想法是动态在第一次加载/执行 javascript 代码期间,在 myMethod() 的第一行之前注入(inject)一些代码。如:
MyClass1.prototype.myMethod = function() {
   alert("I was injected dynamically");
   alert("first row");
}

因此,对于其他所有类和方法,也应该发生同样的情况。这可以使用 Function.prototype 方法实现吗?

最佳答案

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

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 (尝试自己搜索更多内容)。

关于javascript - 如何在每个原型(prototype)方法的开头注入(inject) javascript 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17502932/

相关文章:

javascript - ASP.NET MVC 中的拖放区错误消息

javascript - 如何将数据从 render 方法传递到 React 中的多个组件?

javascript - Google 跟踪代码管理器点击类事件不起作用

javascript - 如果两个多维对象在 javascript 中具有相同的键值,则合并它们

javascript - HTML元素插入DOM时是否有 "element ready"事件?

javascript - 从存储的事件对象重新触发 javascript 事件

javascript - 如何使用事件监听器复制 DOM 节点?

javascript - 在 Immutable.JS 的上下文中, "dense"是什么意思?

javascript - 为什么我不能在单独的 html 和 js 文件中使用全局变量?

javascript - 如何在jsp端显示类似 "Please wait"的加载消息?