对象功能没有输出
问题描述:
此问题来自公司的书面测试。它看起来很混乱。我以为它会打印任何this.name
设置。当我键入代码时,它什么也没有显示。我对闭包知之甚少,我认为这与问题有关。我想在这里解释一下。对象功能没有输出
function dd(name) {
this.name = name;
this.go = function() {
setInterval(function() {
return this.name;
}, 2000)
}
}
var tt = new dd("corolla");
tt.go()
答
你不能用这种方式得到setInterval
的返回值。有一个回调尝试如下面的代码片段
function dd(name)
{
this.name=name;
console.log(name);
var _this = this;
this.go=function(cb)
{
setInterval(function() {
cb(_this.name);
},1000)
}
}
var tt=new dd("corolla");
tt.go(function(ret) {
console.log(ret);
})
而且,请注意,里面setInteval
的this
值是不一样的水獭功能。这就是为什么var _this=this;
+0
哦,我现在明白了。但不得不说这很奇怪。如果我正好在setInterval里面,这通常指的是窗口对象。所以我实际上在setInterval的全局上下文中声明了这个作为变量,以便setInterval可以访问对象的名称属性,对吧? – salehin
+0
是的,像这样的函数中的'setInterval'有点太'隐藏'了。处理这个问题有不同的方法,我只想指出在这个问题中使用回调。 –
这是JavaScript中最受好评的过度讨论话题之一。 – meagar