__proto__适用于IE9或IE10

时间:2011-12-07 10:04:55

标签: javascript internet-explorer prototype

是否有可能在IE9或IE10中更改对象的__proto__属性? 或者MS仍然没有计划将它包含在他们的JS引擎中?

我需要在一个非常特殊的情况下,我需要在创建对象后更改__proto__

4 个答案:

答案 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__更受青睐。

所有现代浏览器including Internet Explorer 11都可以使用

__proto__

答案 1 :(得分:2)

在Windows Blue的泄露版本中找到的IE11中包含

__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;