我在JavaScript类(函数)中使用变量this.foo和函数this.bar(),this.bar()我在间隔中调用但是有一个小问题,JavaScript忘记了this.foo而我无法使用它。 foo in this.bar()。为什么呢?
function Somethink(element) {
this.foo = element;
this.bar = function () {
// And now this.foo is undefined
}
setInterval(this.bar, 1000)
}
答案 0 :(得分:4)
这是因为setInterval在全局对象的上下文中调用this.bar,而不是在当前对象的上下文中。尝试以这种方式调用它:
var self = this;
setInterval(function () { self.bar() }, 1000);
<强>更新强> 正如评论中指出的那样,另一种选择是使用bind()
setInterval(this.bar.bind(this), 1000);
答案 1 :(得分:3)
因为this
是间隔运行时的窗口范围。您需要使用闭包或bind()
window.setInterval(this.bar.bind(this), 1000);
答案 2 :(得分:1)
function Somethink(element) {
var foo = element;
var bar = function () {
}
setInterval(bar, 1000)
}
改用变量。 '这'根据你所说的地方改变背景
答案 3 :(得分:0)
行为是正确的。在调用bar()
时,this
可能会发生任何事情。通常的解决方法是将this
分配给局部变量:
function Somethink(element) {
var that = this; // trick
that.foo = element;
that.bar = function () {
// Use "that" in here
}
setInterval(that.bar, 1000)
}
that
将确保代码保留对this
原始值的引用。
答案 4 :(得分:-1)
你可以这样做:
function Somethink(element) {
this.foo = element;
this.bar = function () {
// And now this.foo is undefined
}
var self = this
setInterval(self.bar, 1000)
}