js原型问题,在循环中创建对象出了些问题? 10
19-07-25 11:05
2818
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 人点赞
请登录后发表评论
prototype内定义的属性或方法是所有实例间共享的,所以你map的时候,每次都覆盖了之前定义的test()方法。
自己多看书,推荐《你不知道的JavaScript上》。