是否有可能在IE9或IE10中更改对象的__proto__
属性?
或者MS仍然没有计划将它包含在他们的JS引擎中?
我需要在一个非常特殊的情况下,我需要在创建对象后更改__proto__
。
答案 0 :(得分:12)
__proto__
将在ES6中标准化。它目前在Appendix B of the ES6 draft,实际上意味着如果它被实现,它需要具有以下语义。
__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__
。
答案 1 :(得分:2)
__proto__
:http://fremycompany.com/BG/2013/Internet-Explorer-11-rsquo-s-leaked-build-395/
答案 2 :(得分:1)
nonanswer作为最后一个案例:
更改您的代码,以便现在可以通过普通属性的显式委派来访问最初通过更改的原型访问的所有属性:
{
a: 17,
__proto__: { ... }
}
到
{
a: 17,
proto: {...}
}
答案 3 :(得分:0)
我不确定你的问题究竟是什么,因为你的问题没有说明,但对于proto的大多数用途,你应该可以使用prototype
。
var foo = new Bar();
//this also affects foo
Bar.prototype.baz = something;