setTimeout调用的函数中this指向的问题
创建一个对象,然后 setTimeout
执行,形如:
var obj = {
foobar: 4,
event: function() {
console.log(this);
}
};
setTimeout(obj.event, 2000);
输出结果为:
Timeout {
_called: true,
_idleTimeout: 2000,
_idlePrev: null,
_idleNext: null,
_idleStart: 53,
_onTimeout: [Function],
_repeat: null }
即在setTimeout函数调用obj中的event之后,event中的this指针指向了一个类型为setTimeout返回的Timeout
句柄的对象,具体是不是改setTimeout返回的对象我没有深究。
我想实现的是在event中能使用 foobar
的值,本来想用this实现,结果发现了这个问题。
有没有什么办法可以使用该值呢?
一脸懵逼= =,没有的话我就只能换思路了。
6 回复
var obj = {
foobar: 4,
event: function() {
console.log(this);
}
};
setTimeout(obj.event.bind(obj), 2000);
this的指向是调用时候的不是定义时候的,像楼上这样bind一下就可以了
1楼正解
bind或者直接箭头函数。因为js的this指针是运行时上下文,并不是定义上下文
@xiaofuzi 谢过,的确可以~
限定context:
var obj = {
foobar: 4,
event: function() {
console.log(this);
}
};
setTimeout(function() {
obj.event();
}, 2000);