在 JavaScript 中更改主机对象的原型函数

Change a host object's prototype function in JavaScript?

本文关键字:对象 原型 函数 主机 JavaScript      更新时间:2023-09-26
我想

在每次调用appendChild时执行一些代码。让我们假设我无法知道它将在何时何地被调用。我想我可以使用原型来做到这一点,但它们似乎不起作用:

var actAppendChild = Element.prototype.appendChild;
Element.prototype.appendChild = function(node){
    actAppendChild.call(this,node);
    //execute custom code here...
    console.log("foo");
}
document.body.appendChild(someNode);

但是"foo"不会打印到控制台,也不会打印到新原型函数中的任何代码。我做错了什么?

我可以确认它即使在IE8 +,Safari,Chrome和Opera上也能正常工作。只是一个建议:将代码包装在闭包中以避免污染全局命名空间始终是一种最佳实践,如下所示:

(function(){
  var actAppendChild = Element.prototype.appendChild;
  ....
}());