setTimeout调用的函数中this指向的问题
发布于 8 年前 作者 microud 4027 次浏览 来自 问答

创建一个对象,然后 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一下就可以了

bind或者直接箭头函数。因为js的this指针是运行时上下文,并不是定义上下文

@xiaofuzi 谢过,的确可以~

限定context:

var obj = {
  foobar: 4,
  event: function() {
    console.log(this);
  }
};

setTimeout(function() {
  obj.event();
}, 2000);
回到顶部