# 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 类数组想用数组的方法的解决方案总结

let obj={
    0:10,
    1:20,
    length:2
}
1
2
3
4
5

解决方案1:改变this

[].forEach.call(obj,item=>{
    console.log(item);// 10,20
})
1
2
3
  • 解决方案2:改变原型指向
obj.__proto__=Array.prototype
1
  • 解决方案3:把需要用的方法作为obj的一个私有属性
obj.each=Array.prototype.forEach;
1
Last Updated: 1/29/2021, 9:39:36 PM