试图删除HTMLElement的原型失败
Attempt to delete prototype of HTMLElement fails
我试图删除HTMLElement.prototype
的.insertBefore();
,但当我检查它时,而不是未定义的值,它返回实际函数?为什么?
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/
<认真的,老兄,看看那篇文章。它有一个可笑的清晰和简洁的解释这一切!属性属性/strong>
每个属性都可以有0个或多个以下属性:ReadOnly, DontEnum, DontDelete和Internal。你可以把它们看作标志——一个属性可以存在于另一个属性上,也可以不存在。在今天的讨论中,我们只对DontDelete感兴趣。
内置和DontDelete
这就是它的全部内容:属性上的一个特殊属性,控制该属性是否可以删除。注意,一些内置对象的属性被指定为具有DontDelete,因此不能被删除。特殊参数变量(或者,正如我们现在所知道的,激活对象的属性)具有DontDelete。任何函数实例的length属性都有DontDelete。
注意:即使他们有dontDelete
属性集,你仍然可以覆盖它:
HTMLElement.prototype.insertBefore = '';
// or
HTMLElement.prototype.insertBefore = null;
// or
HTMLElement.prototype.insertBefore = undefined;
浏览器实现可能将该属性设置为不可配置
可能有更大的机会是可写的:
HTMLElement.prototype.insertBefore = null;
console.log(HTMLElement.prototype.insertBefore); // null
请记住,像HTMLElement
这样的对象是主机对象,因此不必遵循常规JavaScript对象的所有相同规则。
例如,试图在严格模式下delete
一个不可配置的属性应该抛出一个错误,但在Chrome中测试,没有抛出错误。
看到这里,你如果你创建自己的自定义属性,你可以delete
那就好了:
"use strict";
HTMLElement.prototype.custom_property = 'value'; // new property
console.log(HTMLElement.prototype.custom_property); // value
try {
delete HTMLElement.prototype.custom_property;
} catch (e) {
console.log(e);
}
console.log(HTMLElement.prototype.custom_property); // undefined
http://jsfiddle.net/YrvE4/3/HTMLElement.prototype
,像所有的DOM一样,是一个"主机对象",它基本上是由ECMAScript环境提供的,在ECMAScript规范中没有定义。主机对象有一些必须遵循的规则:[[Delete]]
完全允许什么都不做,即使Object.getPropertyDescriptor
有[[Configurable]]: false
。
- 使用“;这个“;JavaScript原型方法中的关键字
- 引用类变量中的原型方法
- 如何从对象的原型方法访问JavaScript对象属性
- 为什么要包装每一个原型“;类“;JS中具有匿名函数的对象
- 当json解析空响应时,Whatwg-Fetch失败,我该如何防止它
- JsFiddle在分叉后描述失败
- Node.js中的JavaScript原型对象效率
- 重载JS'firefox中的对象原型
- “util.inherits”和在NodeJS中扩展原型之间的区别
- 附加到原型属性的Do函数没有闭包
- 在原型.js中设置原型值失败
- Javascript 原型函数失败
- 为什么这个Javascript原型代码失败了
- 为什么这个原型失败了
- JavaScript继承(将原型设置为内部)失败
- jQuery'原型部分继承失败
- obj.如果在ExtJs类原型中定义了构造函数,则get函数失败
- 试图删除HTMLElement的原型失败
- 由于将比较方法添加到数组原型而导致测试失败.如何更新代码或测试?
- 将Javascript命名空间闭包和原型一起使用会失败