代码如下:
function Dog() {
this.wow = function() {
console.log("Wow");
}
this.yelp = function() {
this.wow();
}
}
function MadDog(){
}
MadDog.prototype=new Dog();
MadDog.prototype.yelp=function(){
var self=this;
setInterval(function(){
self.wow();
},2000);
}
var test=new MadDog();
test.yelp();
就是:
var self=this;
setInterval(function(){
self.wow();
},2000);
部分,为什么要用闭包?
3 回答
慕运维8079593
TA贡献1876条经验 获得超5个赞
setInterval第一个参数是function类型,支持eval(也就是传入方法名)。
如果不闭包:var self=this;setInterval(self.wow(),2000);
这就相当于var self=this;self.wow();setInterval(undefined,2000);
就达不到延迟2秒执行self.wow();的效果,且还会报错。
正确写法:
写法一:(setInterval的第一个参数如果不是需要重复调用,此方法更简洁,且不会造成过多对象污染)
var self=this;
setInterval(function(){
self.wow();
},2000);
写法二:
var self=this;
function a(){
self.wow();
}
setInterval(a,2000);或setInterval('a',2000);
添加回答
举报
0/150
提交
取消