On Jul 8, 2011, at 6:21 PM, Brendan Eich wrote:
> Sometimes people try to make a new Array instance be the prototype of some
> other object:
>
> js> var o = Object.create([])
> js> o[2] = 0
> 0
> js> o.length
> 0
> js> o[1] = 1
> 1
> js> o[0] = 2
> 2
> js> o.toString()
> ""
> js> o.slice(0,1)
> []
> js> o.length = 3
> 3
> js> o.slice(0,1)
> [2]
> js> o.sort(function(a,b){return a-b}).toString()
> "0,1,2"
> js> o.reverse().toString()
> "2,1,0"
>
> Note the lack of automagic length maintenance in this case.
And the lack of automagic truncation when length is retracted:
js> o.length=0
0
js> o[2]
0
js> o[1]
1
js> o[0]
2
> I think this is all per ES5.
Indeed this all follows from [[DefineOwnProperty]] internal method usage
specification. It's considered a drag by people trying to make an array-like,
rather than an array with an extended proto chain. I know folks who want the
former and currently have to reach for Proxy as a power-tool, but then the
economics are noticeably different.
/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss