js什么是类数组与数组push方法的原理

类数组

1、可以利用属性名模拟数组的特性
2、可以动态的增长length属性
3、如果强行让类数组调用push方法,则会根据length属性的位置进行属性的扩充

什么是类数组

1、属性要为索引(数子)属性;
2、必须有length属性,最好有push方法
3、如果加上splice方法就长得根数组非常像了
形如:
var obj={
    '0':'a',
    '1':'b',
    '2':'c',
    'length':3,
    'push':Array.prototype.push,
}
console.log(obj)

2、加上splice方法后
var obj2={
'0':'a',
'1':'b',
'2':'c',
'length':3,
'push':Array.prototype.push,
'splice':Array.prototype.splice
}
console.log(obj2)

数组push方法的原理

Array.prototype.push=function (target){
    this[this.length]=target;
    this.length++;
}
//如果obj调用push方法他的运行是
obj.push('d');
//内部原理
Array.prototype.push=function (target){
    //谁调用this就是谁,索引这里this就变成 obj,target则为传入的值为'd',length为3
    obj[3]='d';
    //则obj.length就为4
    obj.length++;
}
//所以例题:
 var obj={
    '2':'a',
    '3':'b',
    'length':2,
    'push':Array.prototype.push
}
obj.push('c');
obj.push('d');
//问:打印obj是什么样子?好好理解上面的push方法执行
Array.prototype.push=function (target){
    this[this.length]=target;
    this.length++;
}
//obj.push('c')的时候--->参数target='c'---->this为obj,this.length=2
//所以this[this.length]=target-->obj[2]='c'-->obj.length++为3;
//相当于
Array.prototype.push=function (target){
    obj[obj.length]=target;
    obj.length++;
}
//所以第一次push('c')的时候obj为:{'2':'c','3':'b','length':3,...}

所以当push('d')的时候和之前一样--->obj[3]='d';obj.length=4

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值