使用带有setInterval的调用进行Javascript绑定
如何使用带有“setInterval”的“call”来获取一个对象文本来调用它自己的方法之一 这里有一个例子。 这是可行的,我理解它为什么有效。 计时器对象每秒调用一次自己的tick方法使用带有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("
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);