On 24/09/2010, at 23:26, P T Withington wrote:
> On 2010-09-24, at 16:01, Dmitry A. Soshnikov wrote:
> 
>> An object is array (if and only if by the spec) if its [[Class]] is "Array". 
>> Even if the object implements all the interface and has all invariants (such 
>> as "length" property) of a casual array.
> 
> Which is a bummer.  I've wanted to be able to subclass both Array and String 
> in the past, and you can't.  You can only fake it to a certain extent.

classProto= [];
classProto.method= function () {};
b= [];
b.__proto__= classProto;  // <- That's all that's needed : an Array.create()
b.method
-> function

b is an array:

Array.isArray(b)
-> true

Its .length works:
b.length
-> 0
b.push(27) ; b.length
-> 1
b[2]= 27 ; b
-> [27, undefined, 27]
b.length
-> 3

So b is truly a subclass of Array, not a fake one.
-- 
Jorge.


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

Reply via email to