# 1 以下代码的输出结果
let obj = {
2: 3,
3: 4,
length: 2,
push: Array.prototype.push
}
/**
* Array.prototype.push = function () {
this[this.length] = val;
this.length++;
}
obj.push(1)执行过程中
obj[obj.length]=1 =>obj[2]=1
obj.length++ =>obj.length=3
obj.push(2)执行过程中
obj[obj.length]=2 =>obj[3]=2
obj.length++ =>obj.length=4
*/
obj.push(1);
obj.push(2);
console.log(obj);
//所以最终输出
// {
// 2: 1,
// 3: 2,
// length: 4,
// push: Array.prototype.push
// }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 2 类数组想用数组的方法的解决方案总结
let obj={
0:10,
1:20,
length:2
}
1
2
3
4
5
2
3
4
5
解决方案1:改变
this
[].forEach.call(obj,item=>{
console.log(item);// 10,20
})
1
2
3
2
3
- 解决方案2:改变原型指向
obj.__proto__=Array.prototype
1
- 解决方案3:把需要用的方法作为
obj
的一个私有属性
obj.each=Array.prototype.forEach;
1