在Javascript中在类里用setTimeout的一些问题
functionxilou(){this.name="xilou";this.sex="男";this.num=0;}xilou.prototype.count=func...
function xilou(){
this.name="xilou";
this.sex="男";
this.num=0;
}
xilou.prototype.count=function(){
this.num+=1;
alert(this.sex+this.num+this.name);
alert(this.count)
var self=this;
//setTimeout(function(){self.count();},1000); //D:正确
//setTimeout('self.count()',1000)// can't do it
}
var x=new xilou();
x.count();
为什么第一种正确,第二种不行,第二种的self不就相当于x吗? 展开
this.name="xilou";
this.sex="男";
this.num=0;
}
xilou.prototype.count=function(){
this.num+=1;
alert(this.sex+this.num+this.name);
alert(this.count)
var self=this;
//setTimeout(function(){self.count();},1000); //D:正确
//setTimeout('self.count()',1000)// can't do it
}
var x=new xilou();
x.count();
为什么第一种正确,第二种不行,第二种的self不就相当于x吗? 展开
2个回答
展开全部
这是有关於javascript变量作用域的问题
你能提出这个问题可能时受了eval使用的影响
setTimeout与eval不一样
eval在运行时是改变作用域/this的
而setTimeout的作用域是window
比如以下代码
(function(){console.log(this),eval('console.log(this)'),setTimeout('console.log(this)',0)}).call({Test:!0})
你运行下看看
说完上面的
再针对与你现在这个具体的代码说明下
setTimeout(function(){self.count();},1000); //D:正确
你在此生成了个匿名函数,在这个函数调用时会逐层的找self这个玩意,由於javascript对作用域的解释,故而能找到你要的self
setTimeout('self.count()',1000)
此处给setTimeout的是字符串,其作用域是window,故而找不到self
关於javascript的作用域的问题 嗯 多看些文档加深下理解吧~~
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询