"not a Date object" vs. "not an object with [[Class]] of ''Date''"

Brendan Eich brendan at mozilla.com
Sat Oct 2 13:51:18 PDT 2010

On Oct 2, 2010, at 6:49 AM, Jorge wrote:

> On 02/10/2010, at 15:29, Brendan Eich wrote:
>> On Sep 6, 2010, at 1:43 AM, Dmitry A. Soshnikov wrote:
>>> For what to create a proxy? It's only for catch-traps (yes, it may be used additionally to create a _catcher_ with "Array" [[Class]], but without additions -- i.e. if a user wants just to inherit from Array.prototype and to have all arrays' stuff -- proxies are not needed to him).
>> Proxies are required to update length to be one greater than index (property name-string P such that ToString(ToUint32(P)) == P and ToUint32(P) is not 2^32 - 1) when setting an indexed property. Array's magic [[Put]] is not inherited.
> Why not simply spec an Array.create() ?
> -no need to redefine what an array is.

It's not clear from kangax's blog post that an array with an extra object on its prototype chain before Array.prototype is enough, but if it is, then yes: Array.create is simpler and more direct than using proxies.

> -no need to learn new concepts ( we're used to Object.create() already )

There's definitely a new concept here. Right now you can't create an array instance whose [[Prototype]] is not some Array.prototype. Array.create changes that.

> -easy to grasp, expected behaviour. 
> -it's a 3-liner that would take no more than 3 minutes to implement in JS in any current UA.
> -it would just need to be in the ES specs.

"3-liner", "3 minutes" and "just" need demonstration. Are you writing the code and spec patches? Talk is cheap :-|. Arrays are highly optimized in modern engines (up to some array sparseness limit). Adding a prototype object shouldn't hurt if the new proto-object contains no indexed properties, though.


More information about the es-discuss mailing list