-1
在以下片段中,子类数组的行为与原始数组的行为不同。为什么?子类数组的长度
function Arr() {}
Arr.prototype = new Array();
var iArr = new Arr();
iArr[0] = 9;
iArr[5] = 10;
console.log(iArr.length);
console.log(iArr[0]);
console.log(iArr[5]);
iArr.push(87);
console.log(iArr.length);
console.log(iArr[0]);
console.log(iArr[5]);
结果
0
9
10
1
87
10
而
var iArr = new Array();
iArr[0] = 9;
iArr[5] = 10;
console.log(iArr.length);
console.log(iArr[0]);
console.log(iArr[5]);
iArr.push(87);
console.log(iArr.length);
console.log(iArr[0]);
console.log(iArr[5]);
给
6
9
10
7
9
10
我本来预期的第一个片段为好。
我不明白为什么第一个片段的长度属性没有通过索引访问元素而改变。
[你可以在不ES5子阵列(http://perfectionkills.com/how-ecmascript-5-still- do-not-allow-to-subclass-an-array /) –
在这种情况下,这意味着什么?未定义的行为?那么ES6(iojs)呢? – JeffRSon
密切相关:[使用setPrototypeOf进行数组子类化](http://stackoverflow.com/q/27985546/710446) – apsillers