我试图删除.insertBefore();HTMLElement.prototype,但是当我检查它时,它返回的是实际功能而不是未定义的值?为什么?

console.log(HTMLElement.prototype.insertBefore); // function insertBefore() { [native code] }

delete HTMLElement.prototype.insertBefore;

console.log(HTMLElement.prototype.insertBefore); // function insertBefore() { [native code] }


您能解释一下为什么这行不通吗?我在自己的构造函数上尝试了此方法,但它起作用了,但是对于内置的却没有。

最佳答案

您不能像这样使用DELETE:

http://perfectionkills.com/understanding-delete/


  属性属性
  
  每个属性在以下集合中可以具有零个或多个属性-ReadOnly,DontEnum,DontDelete和Internal。您可以将它们视为标志-属性可以存在于属性中,也可以不存在。在今天的讨论中,我们仅对DontDelete感兴趣。
  
  内置和DontDelete
  
  这就是全部内容:属性上的特殊属性,用于控制是否可以删除该属性。请注意,内置对象的某些属性被指定为具有DontDelete,因此不能删除。特殊参数变量(或我们现在知道的Activation对象的属性)具有DontDelete。任何函数实例的length属性也具有DontDelete。


认真的人,读那篇文章。它对所有这些都有一个荒谬的,简洁的解释!



注意:即使设置了dontDelete属性,您仍然可以覆盖它:

HTMLElement.prototype.insertBefore = '';
// or
HTMLElement.prototype.insertBefore = null;
// or
HTMLElement.prototype.insertBefore = undefined;

10-07 23:18