I meant that IIRC `obj["__proto__"]` should not invoke that Annex B specified getter (@Benjamin, Annex B is where you'll find everything related indeed) but `obj.__proto__` will ... unless once again I've missed some update.
Yeah, I know that you link stuff, and glad you made some time for extra clarification. Cheers On Mon, Oct 14, 2013 at 1:22 PM, Brendan Eich <[email protected]> wrote: > Andrea Giammarchi wrote: > > __Current Status__ > > > (Thanks for the dunders! :-P) > > > Instead of formalizing its form, ES6 accepted `Object.setPrototypeOf` as > described in specs and decided to silently move beside, but still have in > specs, the dunder `__proto__` form, fixing at least a couple of related > gotchas so that: > > * unless explicitly set as property, `__proto__` is a named property for > every object that should not affect inheritance so that `obj["__proto__"]` > or `obj[key]` where `key` is the string `"__proto__"` should not hot/swap > the prototypal chain > > > I'm not sure what you mean here, but first, __proto__ is not specified in > ES6 drafts as an own property. See > > http://people.mozilla.org/~jorendorff/es6-draft.html#sec-B.2.2.1 > > ** > B.2.2.1<http://people.mozilla.org/%7Ejorendorff/es6-draft.html#sec-object.prototype.__proto__>Object.prototype.__proto__ > > Object.prototype.__proto__ is an accessor property with attributes { > [[Enumerable]]: false, [[Configurable]]: true }. The [[Get]] and [[Set]] > attributes are defined as follows > ** > B.2.2.1.1<http://people.mozilla.org/%7Ejorendorff/es6-draft.html#sec-get-object.prototype.__proto__>get > Object.prototype.__proto__ > > The value of the [[Get]] attribute is a built-in function that requires no > arguments. It performs the following steps: > > 1. Let *O* be the result of calling > ToObject<http://people.mozilla.org/%7Ejorendorff/es6-draft.html#sec-toobject>passing > the > *this* value as the argument. > 2. > ReturnIfAbrupt<http://people.mozilla.org/%7Ejorendorff/es6-draft.html#sec-returnifabrupt> > (*O*). > 3. Return the result of calling the [[GetPrototypeOf]] internal method > of *O*. > > ** ** > B.2.2.1.2<http://people.mozilla.org/%7Ejorendorff/es6-draft.html#sec-set-object.prototype.__proto__>set > Object.prototype.__proto__ > > The value of the [[Set]] attribute is a built-in function that takes an > argument proto. It performs the following steps: > > 1. Let *O* be > CheckObjectCoercible<http://people.mozilla.org/%7Ejorendorff/es6-draft.html#sec-checkobjectcoercible> > (*this* value)*.* > 2. > ReturnIfAbrupt<http://people.mozilla.org/%7Ejorendorff/es6-draft.html#sec-returnifabrupt> > (*O*). > 3. If > Type<http://people.mozilla.org/%7Ejorendorff/es6-draft.html#sec-ecmascript-data-types-and-values> > (*proto*) is neither Object or Null, then return *proto*. > 4. If > Type<http://people.mozilla.org/%7Ejorendorff/es6-draft.html#sec-ecmascript-data-types-and-values> > (*O)* is not Object, then return *proto*. > 5. Let *status* be the result of calling the [[SetPrototypeOf]] > internal method of *O* with argument *proto*. > 6. > ReturnIfAbrupt<http://people.mozilla.org/%7Ejorendorff/es6-draft.html#sec-returnifabrupt> > (*status*). > 7. If *status* is *false*, then throw a *TypeError* exception. > 8. Return *proto*. > > ** ** > > /be >
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

