On Sep 6, 2010, at 7:17 AM, Dmitry A. Soshnikov wrote: > On 02.10.2010 17: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. >> > > Yep, true, but if we have ability to specify the [[Class]] -- we'll have > overloaded [[DefineOwnProperty] (or [[Put]] in ES3). > > Here's this ad-hoc (with using __proto__ injection) implementation: > http://gist.github.com/607668 > > By the way, at first glance, the ability to specify [[Class]] with using > first level of inheritance is not so convenient and needed.
Indeed. Also, I would not say this shows the abilitiy to specify [[Class]] as if that internal property could be specified as "Array" for a non-Array instance -- all you are doing is making an Array instance whose [[Prototype]] links to a user-specified object. That's novel in ES5, i.e., without settable __proto__ and without Array.create as Jorge pointed out. /be > Because with the same success we may create a simple array and augment it > with needed properties. However, starting from the second and later > inheritance levels -- it may be convenient. > > This is if to talk about prototypal inheritance. If to consider class-based > inheritance (that is, with using constructors), possibly it can be sense in > the special meta-constructor (a constructor of constructors) which may > specify, objects of what kind (of what [[Class]]) a newly created constructor > may produce. > > P.S.: in addition, the Proxy constructor may also accept className parameter. > But repeat -- proxies are needed to trap the property access. If a user just > want to have Array.prototype in inheritance chain and at the same time have > an object of the "Array" kind, he just creates it with specifying this kind. > He don't need to write a proxy's handler for that. Howerver, if he does need > the catcher -- he creates a proxy of "Array" kind. > > Dmitry. > >> /be >> > _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

