在IE9或IE10中有没有可能更改对象的__proto__
属性?
还是微软仍然没有计划将其包含在他们的JS引擎中?
我需要在一个非常特殊的情况下改变__proto__
在对象创建后。
在IE9或IE10中有没有可能更改对象的__proto__
属性?
还是微软仍然没有计划将其包含在他们的JS引擎中?
我需要在一个非常特殊的情况下改变__proto__
在对象创建后。
__proto__
将在ES6中标准化。它目前在 ES6草案的附录B中,这意味着如果它被实现,它需要具有以下语义。
__proto__
作为Object.prototype
上的访问器可用,这意味着所有对象默认都可以读取和写入它。但是,可以从Object.prototype
中删除它(使用delete
)。一旦删除,__proto__
将作为普通数据属性工作,设置时没有副作用。
__proto__
也是对象字面量中的特殊语法形式。即使删除了Object.prototype.__proto__
,它也将起到设置[[Prototype]]的作用。
var p = {a: 1}; var o = { __proto__: p, b: 2 }ES6还引入了
Object.setPrototypeOf
(不在附录中)。这比设置__proto__
更受欢迎。
__proto__
在所有现代浏览器中都可用,包括Internet Explorer 11。__proto__
在泄露的 Windows Blue 构建中的 IE11 中被包含:http://fremycompany.com/BG/2013/Internet-Explorer-11-rsquo-s-leaked-build-395/
最后的无奈之举:返回一个非答案。
修改您的代码,使得所有原本通过更改原型访问的属性现在都通过普通属性的显式委托进行访问:
{
a: 17,
__proto__: { ... }
}
到
{
a: 17,
proto: {...}
}
我不确定你具体需要什么,因为你的问题没有说明,但对于大多数proto的用途,你应该能够使用prototype
。
var foo = new Bar();
//this also affects foo
Bar.prototype.baz = something;