[英]In Javascript, does “this.something” look up the scope chain for “something”?
[英]Javascript forgets this.something variable
我在JavaScript类(函数)中具有变量this.foo和函数this.bar(),this.bar(),但我有一个小问题,JavaScript忘记了this.foo,在此我无法使用this.foo 。酒吧()。 为什么?
function Somethink(element) {
this.foo = element;
this.bar = function () {
// And now this.foo is undefined
}
setInterval(this.bar, 1000)
}
发生这种情况是因为setInterval在全局对象的上下文中而不是在当前对象的上下文中调用this.bar。 尝试以这种方式调用它:
var self = this;
setInterval(function () { self.bar() }, 1000);
更新正如评论中指出的那样,另一种选择是使用bind()
setInterval(this.bar.bind(this), 1000);
因为this
是间隔运行时的窗口范围。 您需要使用闭包或bind()
window.setInterval(this.bar.bind(this), 1000);
function Somethink(element) {
var foo = element;
var bar = function () {
}
setInterval(bar, 1000)
}
请改用变量。 “此”会根据您在哪里调用来更改上下文
行为是正确的。 在当时间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
的原始值的引用。
您可以这样:
function Somethink(element) {
this.foo = element;
this.bar = function () {
// And now this.foo is undefined
}
var self = this
setInterval(self.bar, 1000)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.