Standardizing __proto__

Brendan Eich brendan at mozilla.com
Fri Mar 18 12:59:17 PDT 2011


On Mar 18, 2011, at 10:02 AM, John-David Dalton wrote:

>> For symmetry with
>> Object.create, you might want Boolean.create, Date.create and so
>> forth, but that's still initialization-time, and TBH I would be
>> surprised if there were actually many collisions between libraries
>> that augment those prototypes.
> 
> In the Script Junkie article I cover a few examples of collisions with
> Function.prototype's and problems with Array.prototype.
> Date.create, Function.create and the like clutters the API. I would be
> for a more generic Object.setPrototypeOf() addition.

You are missing shaver's point that initiializing is not the same as reassigning later on a created and reachable object.

We really do not want to support reassignment in our implementation, and I suspect other implementors feel the same. It's a sunk cost, but see the sunk-cost fallacy. Nothing is free, people still pay with security attack surface and consequent (both friendly fuzzers and bad actors attack that surface) bug fixing.


> http://es5.github.com/#x15.2.3.2
> 
>> and I can't really find anything other than Fuse that uses
>> it on the web today
> 
> PrototypeJS uses it.

Prototype gets __proto__ but AFAICS does not set it.


>> I think you can also achieve what you want with Harmony proxies, so
>> you'll have that option in the next edition of ES.
> 
> I don't know. It would need to preserve internal [[Class]] as __proto__.

Proxies may help some use-cases. They are not a solution if you want a one-off delegation chain from a non-proxy to another object.

/be



More information about the es-discuss mailing list