On Jul 10, 2011, at 3:02 PM, David Herman wrote:

>>> I'm not sure what Array.prototype methods would or wouldn't work on 
>>> instances of SubArray.
>> 
>> All of them.  They are all generic.
> 
> We're speaking too broadly here. It depends on what we want to work how. For 
> example, .map can't magically know how to produce a SubArray as its result if 
> that's how SubArray wants it to work. But what I'm actually more concerned 
> about is the behavior of .length. Does the <| semantics make .length work 
> automagically the way it does for ordinary Array instances?

Of course, since the thing on the right of <| is a newly minted Array which has 
its own length.

There's no issue here -- are you thinking of the other case (which I showed), 
Object.create([])? That's where length doesn't "inherit".


>> However, subarray instances have all the internal state and methods that 
>> make them true arrays so even if some of the inherited Array methods weren't 
>> generic they would still work.
> 
> Including .length (which isn't a method, but YKWIM)?

The <| operator sets [[Prototype]] in the newborn-because-literally-expressions 
right operand, to the value of the left operand. So (proto <| [1,2,3]) is an 
Array instance, no mystery or inheritance of Arrayness required. The trick as 
your SubArray example showed is not to lose the Array.prototype heritage -- 
proto ought to have Array.prototype on its proto-chain.

'length' is own in each Array instance, maintained by [[Put]] in ES1-3, 
[[DefineOwnProperty]] in ES5.

/be

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

Reply via email to