Ecmascript 6是否支持可变的__proto__属性?

时间:2012-12-12 11:49:46

标签: javascript ecmascript-6

在目前的Ecmascript 6草案(2012年11月)中,官方支持__proto__财产(B.3.1节)。这有点令人惊讶,因为在当前的浏览器实现中,不推荐使用__proto__属性。

如果目前的草案成立,ES6是否会全力支持可变原型?我是否能够像目前在Firefox中一样为现有对象提供新原型?

2 个答案:

答案 0 :(得分:8)

目前,计划将可变__proto__列入规范(而不仅仅是附件b)。目前的计划是它是一个神奇的数据属性,仅存在于Object.prototype上并充当访问者(神奇的部分)。此属性也将是可删除的,删除了在删除时改变该域的__proto__的功能。我在ES6虚拟机http://benvie.github.com/continuum中按照此说明实现了__proto__

最初它被弃用并取代,但没有就该替代品达成共识。从内在继承的能力是最终目标,并且决定__proto__已经普及(除了它之外的所有东西)并且实现了这个目标,因此阻力最小的路径是接受并编纂它。

答案 1 :(得分:1)

根据Ecmascript 6发布的文档,__proto__仍然存在,但在上述解决方案中指出BergiMattBrowne,我们可以使用Object.setPrototypeOf这是修改后的版本__proto__

  

当使用参数O和proto调用setPrototypeOf函数时,将执行以下步骤:

     
      
  • 让O为RequireObjectCoercible(O)。
  •   
  • ReturnIfAbrupt(O)。
  •   
  • 如果Type(proto)既不是Object也不是Null,则抛出TypeError异常。
  •   
  • 如果Type(O)不是Object,则返回O。
  •   
  • 让状态为O. [SetPrototypeOf]。
  •   
  • ReturnIfAbrupt(状态)。
  •   
  • 如果status为false,则抛出TypeError异常。
  •   
  • 返回O。
  •