On Jul 8, 2011, at 5:53 PM, David Herman wrote:
> I think I still haven't fully grokked what <| means on array literals, but
> could it also be used to "subclass" Array? For example:
>
> function SubArray() {
> return SubArray.prototype <| [];
> }
>
> SubArray.prototype = new Array;
>
> I'm not sure what Array.prototype methods would or wouldn't work on instances
> of SubArray.
Instances of SubArray must mean (new SubArray) results, but those are indeed
true Array instances. They simply have a prototype chain that has been extended:
a = SubArray(); // or new SubArray
Object.getPrototypeOf(a) -> SubArray.prototype (which is an Array)
Object.getPrototypeOf(SubArray.prototype) -> Array.prototype
and Array.prototype of course delegates to Object.prototype
This allows new methods to be added to SubArray.prototype.
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. I think this is all
per ES5.
/be
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss