Allen Wirfs-Brock (2013-04-21T18:41:21.000Z)
github at esdiscuss.org (2013-07-12T02:26:56.822Z)
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<allen at wirfs-brock.com> 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 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: ```js let obj = {__proto__: null} ``` will always create an object whose [[Prototype]] is `null`. Regardless of whether or not anybody has done: ```js delete Object.prototype.__proto__ ``` 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`. > 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__`.