如何将javascript代码注入每个原型方法的开头?
为了调试的目的,我想在javascript方法原型的中插入javascript代码。这个例子只显示了一个类,但是假设我有数百个类,每个类有几十个方法。该机制应该在原型级别执行,而无需指定每个类/方法名如何将javascript代码注入每个原型方法的开头?,javascript,Javascript,为了调试的目的,我想在javascript方法原型的中插入javascript代码。这个例子只显示了一个类,但是假设我有数百个类,每个类有几十个方法。该机制应该在原型级别执行,而无需指定每个类/方法名 function MyClass1() { this.attrib = "ABC"; } MyClass1.prototype.myMethod = function() { alert("first row"); // <---- THE INJECTION SHOULD
function MyClass1() {
this.attrib = "ABC";
}
MyClass1.prototype.myMethod = function() {
alert("first row"); // <---- THE INJECTION SHOULD OCCUR BEFORE THIS LINE OF CODE
}
因此,对于其他每一个类和方法,都应该发生同样的情况。使用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);
}
你问了两个问题,我只回答了其中一个(即如何包装函数)。另一部分——如何在许多函数上实现这一点——最好使用专门的库。事实上,这可以通过使用。我发现有几个JavaScript库提供了这一功能,其中之一是(自己尝试谷歌搜索更多信息)。我希望您不打算使用
alert
显示调试信息。改用console.log
或console.debug
(如果支持的话)。即使console.log
也不可靠。除非开发人员工具已经打开,否则它将使Internet Explorer崩溃。我使用“警报”只是为了进行此查询。我计划执行的调试基于一个特定的控制全局对象。关于复制,我尝试对所有类和所有方法动态执行此操作。我保证我的问题更清楚地说明了这一点。感谢代替了orig=MyClass1.prototype代码>也许你的意思是var orig=MyClass1.prototype.myMethod代码>?
var orig = MyClass1.prototype.myMethod;
MyClass1.prototype.myMethod = function() {
alert('Injected');
return orig.apply(this, arguments);
}