this 作用域变化

agclqq 2012-04-13 04:40:44
下面这段代码报错

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>倒计时</title>
</head>

<body onLoad="_time.action()">
倒计时<span id="_time"></span>秒
</body>
<script>
var _time={
'code':function(){
if(this.fullTime<0){
window.clearInterval(this.intervalId);return;
}
document.getElementById('_time').innerHTML=this.fullTime;
this.fullTime--;
},
'action':function(){
this.fullTime=15;
this.intervalId=window.setInterval(this.code,1000);
}
};
</script>
</html>



下面这段代码正常

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>倒计时</title>
</head>

<body onLoad="_time.action()">
倒计时<span id="_time"></span>秒
</body>
<script>
var _time={
'code':function(){
if(_time.fullTime<0){
window.clearInterval(_time.intervalId);return;
}
document.getElementById('_time').innerHTML=_time.fullTime;
_time.fullTime--;
},
'action':function(){
this.fullTime=15;
this.intervalId=window.setInterval(this.code,1000);
}
};
</script>
</html>



在执行_time.action()时,this是_time,但执行到_time.code()时,this就变为了window,在此猜想,是不是因为window.setInterval(this.code,1000),此方法是将this.code进行了eval()处理,使this指向了全局变量window?求解
...全文
61 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
不耐烦 2012-04-13
  • 打赏
  • 举报
回复
var a = {
echo:function(){
alert(this==window)
}
}


window.setTimeout(a.echo,1000) //true
window.setTimeout(function(){
a.echo(); //false
},1000)

应该清楚了吧

87,902

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧