使用 setInterval 调用的 Javascript 绑定
Posted
技术标签:
【中文标题】使用 setInterval 调用的 Javascript 绑定【英文标题】:Javascript binding using call with setInterval 【发布时间】:2012-06-29 19:03:24 【问题描述】:如何使用“call”和“setInterval”来获取对象字面量来调用它自己的方法之一?
这是一个例子。 这有效,我理解它为什么有效。 定时器对象每秒调用一次自己的tick方法
var timer =
start: function()
var self = this;
setInterval(function()self.tick();, 1000);
,
tick: function()
console.log("tick!");
;
timer.start();
我尝试通过使用“调用”来简化此代码。 下一个例子是我想出的最好的例子。 但它不起作用:tick 方法只调用了一次,然后我得到一个类型错误。
var timer =
start: function()
setTimeout.call(this, this.tick(), 1000);
,
tick: function()
console.log("tick!");
;
timer.start();
我想我真的不明白 call 是如何工作的。 谁能解释我做错了什么?
【问题讨论】:
参考这个***.com/questions/6112330/… 【参考方案1】:你是.calling
.setInterval
不是浏览器调用的回调函数:
setInterval( this.tick.bind(this), 1000 );
应该可以。见.bind
【讨论】:
使用 Safari 5.1.5 这给了我“TypeError: undefined is not a function”。 Firefox 8.0.1 给了我“未捕获的异常:对 WrappedNative 原型对象的非法操作。” @user1282216 查看链接。我假设开发人员不会使用过时的软件进行开发,但显然我错了:P。 firefox 的错误很有趣,你能给我一个 jsfiddle 吗? @user1282216 没关系,我可以在 Firefox 13 中重现该错误,你做错了。使用代码setInterval( this.tick.bind(this), 1000)
而不是setInterval.call( this )
(这会导致错误)
你知道如何添加一些参数到我的方法(tick)吗??谢谢我在尝试这个:setInterval(this.tick("arg_1").bind(this), 1000) ;【参考方案2】:
这就是我最终的结果:
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();
【讨论】:
以上是关于使用 setInterval 调用的 Javascript 绑定的主要内容,如果未能解决你的问题,请参考以下文章
在 setInterval 中调用 clearInterval() 不会停止 setinterval
使用 SetInterval() 调用 Javascript 对象方法