使用带有setInterval的调用进行Javascript绑定

使用带有setInterval的调用进行Javascript绑定,javascript,binding,call,setinterval,object-literal,Javascript,Binding,Call,Setinterval,Object Literal,如何使用带有“setInterval”的“call”来获取一个对象文本来调用它自己的方法之一 这里有一个例子。 这是可行的,我理解它为什么有效。 计时器对象每秒调用一次自己的tick方法 var timer = { start: function() { var self = this; setInterval(function(){self.tick();}, 1000); }, tick: function() { console.log("

如何使用带有“setInterval”的“call”来获取一个对象文本来调用它自己的方法之一

这里有一个例子。 这是可行的,我理解它为什么有效。 计时器对象每秒调用一次自己的tick方法

var timer =
{ 
  start: function()
  {
    var self = this;
    setInterval(function(){self.tick();}, 1000);

  },

  tick: function()
  {
    console.log("tick!");
  }
};

timer.start();
我试图通过使用“call”来简化这段代码。 下一个例子是我想到的最好的例子。 但它不起作用:tick方法只被调用一次,然后我得到一个类型错误

var timer =
{ 
  start: function()
  {
    setTimeout.call(this, this.tick(), 1000);
  },

  tick: function()
  {
    console.log("tick!");
  }
};

timer.start();
我想我真的不明白电话是怎么工作的。
有人能解释我做错了什么吗?

你在
调用
。setInterval
不是浏览器调用的回调函数:

setInterval( this.tick.bind(this), 1000 );

应该有用。请看

这就是我的结局:

  var timer = {
    time: 0,
    start: function() {
      var timerTick = this.tick.bind(this);
      window.setInterval(function() {
        timerTick();
      }, 1000);
    },
    tick: function() {
      this.time += 1;
      console.log(this.time);
    }
  };

  timer.start();

请参阅Safari 5.1.5,这给了我“类型错误:未定义不是函数”。Firefox 8.0.1给了我“未捕获的异常:WrappedNative prototype对象上的非法操作”。@user1282216查看链接。我假设开发人员不使用过时的软件进行开发,但显然我错了:P.firefox错误很有趣,你能给我一个JSFIDLE吗?@user1282216不管怎样,我可以在firefox 13中重现这个错误,你做错了。使用代码
setInterval(this.tick.bind(this),1000)
而不是
setInterval.call(this)
(这会导致错误)您知道如何向我的方法(tick)添加一些参数吗?谢谢我尝试了这个:setInterval(this.tick(“arg_1”).bind(this),1000);