如何设置使用settimer从当前对象调用函数

时间:2009-12-26 23:50:24

标签: javascript

function Something() {
  this.var1 = 0;
  this.var2 = 2;
  this.mytimer;
  this.getCars=function() {
    //some code
  };
  this.start = function(l) {
    this.updateTimer=setInterval("this.getCars();" , 5000);
  };
}

var smth = new Something();
smth.start();

当我输入this.getCars()时,它不起作用。如果函数是全局声明的,我放入例如getCars就可以了。 我不知道如何解决这个问题,因为setInterval变为String的参数。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

var me = this
setInterval(function() {me.getCars()}, 5000)

如果您正好使用prototype,您还可以使用方便的bind方法:

setInterval(this.getCars.bind(this), 5000)

答案 1 :(得分:0)

试试这个:

function Something() {
  this.var1 = 0;
  this.var2 = 2;
  this.mytimer;
  var me = this;
  this.getCars = function() {
    console.log(me.var2);
  };
  this.start = function(l) {
    me.updateTimer = setInterval(me.getCars, 1000);
  }
}

var smth = new Something();
smth.start();

console.log()位是Firefox / Firebug。如果您不使用它,请将其替换为其他内容(尽管我强烈建议您使用它进行开发)。

基本上问题是当你调用一个函数,甚至一个对象的方法时,你调用它的方式决定了this的值。有关详细信息,请参阅Method binding。所以你所做的是修复this的值,正如我在上面的例子中所做的那样(对于方法)。