Allen Wirfs-Brock wrote:
On Apr 21, 2013, at 11:12 AM, Brendan Eich wrote:

David Herman wrote:
On Apr 21, 2013, at 8:55 AM, Allen Wirfs-Brock<[email protected]>   wrote:

Deleting Object.prototype.__proto__ will not be be specified as disabling 
{__proto__: foo}.
Was that what we'd agreed to?
I think what Allen means is, whether or not there's a magic 
Object.prototype.__proto__, you can

Note "can" here.

  define (as in [[DefineOwnProperty]]) a plain old data property (or an 
accessor, for that matter, just different syntax) whose name is '__proto__' in 
an object literal.

No, see the spec. strawman I posted.

What I mean is that:
     let obj = {__proto__: null}
will always create an object whose [[Prototype]] is null.  Regardless of 
whether or not anybody has done:
    delete Object.prototype.__proto__.

Yes, that's what I just wrote!

What part was unclear?

There is no good reason to link the semantics of __proto__ in an object literal 
to the existence of Dunder proto on Object.prototype.  The standard semantics 
of object literal properties in ES5 have no dependencies upon the shape of 
Object.prototype.

We agree.

This is specified by ES5, already.

Doesn't matter because what ES5 specifies is already incompatible with web 
reality when the property name is  __proto__.

No. Browsers implementing ES5 and de-facto __proto__ use [[DefineOwnProperty]] per ES5 to make '__proto__' in 'var o = {__proto__: "haha"}' an own data property shadowing Object.prototype.__proto__.

Anything else (some variation on de-facto __proto__ that uses a magic per-object hidden [[DefineOwnProperty]], e.g.) breaks ES5.

/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to