On Fri, Nov 11, 2011 at 1:22 PM, Allen Wirfs-Brock
<al...@wirfs-brock.com> wrote:
> However, if you want the object to be mutable and to act like a real array, 
> then it has to have the array specialness.  The specialness comes, not from 
> the [[Class]] property but from its alternative definitions of 
> [[DefineOwnProperty]] (see ES5.1 spec. 15.4.5.1).

The Array-like thing discussed in this thread is going to be mutable.

> In ES.next a JS programmer will be able to easily define such an object.  But 
> for ES5 it takes special implementation level intervention.    Since this 
> capability is going to ultimately be in ES.next I don't see why you couldn't 
> do it now, assuming the the engine implementors are all willing to cooperate.
>
> Basically, you would specify that the [[Prototype]] of the instances inherits 
> from Array.prototype and that the instances use the [[DefineOwnProperty]] 
> specification from ES5 section 15.4.5.1.
>
> In either case, you would be specifying a new kind of ES "native object" 
> rather than a "host object'.
>
> BTW, I think that either the immutable or mutable approach would work.  
> However, since the collection is not "live" I don't see why you would really 
> care whether or not a client mutated it.  If they want to process it by 
> deleting elements after they are examined, so what?

Exactly, this is why I'm proposing that it should be mutable.

This does still leave the problem of making Array.filter(myNodeArray,
function(el) { ... }) "work" though. I.e. I think we'd like it to
return a NodeArray rather than a plain Array.

More importantly, we want myNodeArray.filter(function(el){ ... }) to
return a NodeArray. This would be doable by putting a special version
of filter on NodeArray.prototype which would shadow
Array.prototype.filter. This would make myNodeArray.filter "work", but
not Array.filter.

I'm happy to start a separate thread on es-discuss about this, but I'm
worried that it'll fragment the current thread.

/ Jonas

Reply via email to