Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将javascript代码注入每个原型方法的开头?_Javascript - Fatal编程技术网

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

如何将javascript代码注入每个原型方法的开头?,javascript,Javascript,为了调试的目的,我想在javascript方法原型的中插入javascript代码。这个例子只显示了一个类,但是假设我有数百个类,每个类有几十个方法。该机制应该在原型级别执行,而无需指定每个类/方法名 function MyClass1() { this.attrib = "ABC"; } MyClass1.prototype.myMethod = function() { alert("first row"); // <---- THE INJECTION SHOULD

为了调试的目的,我想在javascript方法原型的中插入javascript代码。这个例子只显示了一个类,但是假设我有数百个类,每个类有几十个方法。该机制应该在原型级别执行,而无需指定每个类/方法名

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);
}