js原型问题,在循环中创建对象出了些问题? 10

19-07-25 11:05 1409 2

题目描述

我在map中创建对象输出结果和我想象的不同求大佬解答,谢谢了

相关代码

function Test(num, func) {
    let _num = num
 Test.prototype.num = 0
 Test.prototype.test = () => {
     console.log(this)
     console.log(_num)
     func()
 }
}
test_list = [1, 2, 3, 4].map((x, i)=>{
    return new Test(i, function(){
      console.log(this)
    })
})
test_list[0].test() => 3
test_list[1].test() => 3
test_list[2].test() => 3
test_list[3].test() => 3

为什么list中的Test实列的_num都是3啊? 为什么都是最后一个index, 而不是0,1,2, 但在循环中输出又是正常的了, 最后列表中又不正常。

巧者劳智者忧,无能者无所求
0 人点赞
2 条回答
排序方式 时间 投票
草芥 22
举报 2楼

prototype内定义的属性或方法是所有实例间共享的,所以你map的时候,每次都覆盖了之前定义的test()方法。

草芥 22
举报 1楼

自己多看书,推荐《你不知道的JavaScript上》。

请登录后发表评论