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

Javascript Ecmascript 6是否支持可变的proto属性?,javascript,ecmascript-6,Javascript,Ecmascript 6,在当前的Ecmascript 6草案(2012年11月)中,官方支持\uuuu proto\uuuu属性(第B.3.1节)。这有点令人惊讶,因为在当前的浏览器实现中,\uuuuu proto\uuuu属性被弃用 如果当前的草案成立,ES6是否会完全支持可变原型?我是否能够像目前在Firefox中那样为现有对象提供一个新的原型?目前,计划将可变\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>纳入规范(而不仅仅是附录b)。目

在当前的Ecmascript 6草案(2012年11月)中,官方支持
\uuuu proto\uuuu
属性(第B.3.1节)。这有点令人惊讶,因为在当前的浏览器实现中,
\uuuuu proto\uuuu
属性被弃用


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

目前,计划将可变
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>纳入规范(而不仅仅是附录b)。目前的计划是让它成为一个神奇的数据属性,只存在于Object.prototype上,并充当访问器(神奇的部分)。此属性也将可删除,删除时将无法对该领域的
\uuuuu proto\uuuu
进行变异。我已经在ES6虚拟机中按照此描述实现了
\uuuu proto\uuuu


最初,它将被弃用和替换,但没有就替换达成共识。从内置继承的能力是最终目标,决定是
\uuuuu proto\uuuuuu
已经广泛存在(除了ie之外的所有东西都有)并实现了这一目标,因此阻力最小的途径是接受和编码它。

根据Ecmascript 6发布的文档,仍然存在,但正如上面的解决方案所指出的,我们可以使用的是
\uuuuu proto\uuuu
的修改版本

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

  • 设O为可强制对象(O)
  • 返回到brupt(O)
  • 如果Type(proto)既不是Object也不是Null,则抛出TypeError异常
  • 如果类型(O)不是对象,则返回O
  • 让状态为O[SetPrototypeOf]
  • ReturnIfAbrupt(状态)
  • 如果状态为false,则引发TypeError异常
  • 返回O

\uuuu proto\uuuu
属性“不推荐使用”,因为它不是标准属性,而是
对象.getPrototypeOf(someObject)是首选(ECMA5标准,因此支持X浏览器)。除此之外,动态更改原型并不是什么新鲜事:我在chrome和IE中尝试过,将自定义对象的原型更改为
新数组
,没有任何问题。。。这只是原型固有的model@Elias. getPrototypeOf()是Ecmascript 5的一个特性,因为从来都不是Ecmascript标准的一部分。看来u__________;最初是从浏览器中弃用的,然后(第一次)在标准中引入。虽然这一事件顺序似乎不寻常,但情况似乎确实如此。我特别询问Ecmascript 6-B.3.1中的“新”原型我不知道你在问什么。它在当前的草稿中,所以是的,看起来我们会有。另一方面,它仍然是一个草稿,所以任何东西都可以更改。@bfavaretto-问题是ES6-proto-proto-proto是否会提供与旧的不推荐版本相同的可变行为。也就是说,这是对某些浏览器中假定已死亡的proto实现的完全复活。除了@benvie的精彩回答外,还请注意,当前草案中存在的可变[[Prototype]]是
Reflect.setPrototypeOf
。已经有人讨论过它被错误地放置了,听起来好像
\uuuuu proto\uuuuuu
最终会被使用,但现在仍然有点不确定。只要继续,哇,这太疯狂了!这个答案似乎过时了。看来替换(
Reflect.setPrototypeOf
)的共识已经形成,并且
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
仍在web遗留附件B中;没有移动它的计划。根据,在ES6中执行此操作的官方方法将是
Object.setPrototypeOf