我有一个 Backbone 模型,看起来有点像这样:
var myModel = Backbone.Model.extend({
watch : function() {
this.watcher = setInterval("this.refetch", 5000);
}
refetch : function() {
//do something
}
});
setInterval
方法实际上不起作用,因为我想,this.refetch
在 setInterval
调用中无效。 setInterval("refetch", 5000);
也不起作用。
我现在正在做的是:
watch : function() {
var that = this;
setInterval(function(){
that.refetch();
}, 5000);
}
有没有更好的方法来做到这一点,这样我就不需要使用that
。
最佳答案
因为 Backbone 已经自带了 underscore.js,所以使用它。在您的情况下,可以使用 _.bind
将上下文绑定(bind)到区间函数:
setInterval( _.bind( function(){this.refetch();}, this), 5000);
这是更好的方法,不仅因为它更短,而且因为它可以防止 that
别名在嵌套范围中可见,这可能会导致各种难以捕获的错误。请参阅 idiomatic.js 风格指南,“这方面的面孔”部分:https://github.com/rwldrn/idiomatic.js/
关于javascript - setInterval 中引用成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13667599/