this的问题
var orders=document.getElementsByClassName("order");
for(var i=0;i<orders.length;i++){
orders[i].index=i;
orders[i].onclick=function(){
console.log(orders[i].index);
}
}
报错如下所示:
var orders=document.getElementsByClassName("order");
for(var i=0;i<orders.length;i++){
orders[i].index=i;
orders[i].onclick=function(){
console.log(this.index);
}
}
而将orders[i]改成this的时候却能够正常运行。
我的疑问是this指向的是当前的对象,而当前对象就是orders[i],为什么我换了一下就报错了呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
常见闭包问题。。
因为
click
时的i
已经是为orders.length了。所以orders[i]是undefined。this的话不同,就是当前对象。
你问题的方向错了,这个不是this的问题。
你上面之所以不行,是以为 console.log(orders[i].index);这个i出了问题,这个i = orders.length .
好好理解下
你换个思路想一想,两个orders[i]一定是相等的,互相都是指向对方吗? 前一个orders[i]也是这个名字,他们指向是不确定的,相当于后面每次运行都把前面的index都给覆盖了,最后可能就给最后一个加上了index,前面都没这个属性,也就无法读取。
当然这只是一种思考方法,确实就是闭包的问题。