setTimeout 与 setInterval 中的 this
不管当前使用的this指向谁,在使用 setTimeout 或者 setInterval 中的 this 都会指向最外层对象,也就是window ,而使用箭头函数就可以让 this 继续指向上一层对象而不是最外层。
<body>
<buttn id='demo'>发送验证码</button>
</body>
<script type="text/javascript">
// jquery
// 重新发送验证码倒计时
$("#demo").click(functuin() {
// 给demo按钮添加disabled禁用属性,this指向button标签对象
$(this).addClass('disabled');
var time = 30;
// 想要在click中使用setTimeout, 普通写法setTimeout(function(){}, 1000),会让this指向window,导致不能使用$(this)去直接操作button
// 可以使用 _this = this 先把button对象拿出来,更简单的方法是使用箭头函数 (=>)
var interval= setInterval(() => {
if(condition){
// 去除定时器
clearInterval(interval);
$(this).removeClass('disabled');
$(this).attr('disabled', false);
$(this).test("重新发送");
return;
}
time--;
$(this).text('重新发送(' + time + 's)');
}, 1000)
})
</script>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。