关于类数组

关于类数组

 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
    };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值