我试图删除.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;