关于类数组
function test() {
console.log(arguments);
//arguments.push(7);
}
test(1, 2, 3, 4, 5, 6);
//[1, 2, 3, 4, 5, 6, 7,]
此处的arguments就是一个类数组,它看起来像数组,但不具备数组的方法,如push()和splice()等
var obj = {
'0' : 'a',
'1' : 'b',
'2' : 'c',
'length' : 3,
'push' : Array.prototype.push,
'splice' : Array.prototype.splice
};
这里的对象obj也是一个类数组,而且还有push()和splice()方法。
进一步了解类数组
var obj = {
'2' : 'a',
'3' : 'b',
'length' : 2,
'push' : Array.prototype.push
};
obj.push('c');
obj.push('d');
//最后的结果是什么?
为得出结果,我们需要先了解一下数组的push方法的内部构造。
var arr = [1, 2, 3, 4];
arr.push(5);
//arr = [1, 2, 3, 4, 5];
正常的数组push()方法的调用。
将push方法重写
Array.prototype.push = function (target) {
this[this.length] = target;
length ++ ;
}
//调用重写后的push方法
var arr1 = [1, 2, 3];
arr1.push(0);
//arr = [1, 2, 3, 0];
//它能够正常使用,所以这就是push方法的内部构造
//关键在于传入数组的length
根据push的内部构造,可以得出上面问题的结果
obj = {
'2' : 'c',
'3' : 'd',
'length' : 4,
'push' : Array.prototype.push
};