javascript - setInterval 中引用成员函数

标签 javascript backbone.js closures

我有一个 Backbone 模型,看起来有点像这样:

var myModel = Backbone.Model.extend({
    watch : function() {
        this.watcher = setInterval("this.refetch", 5000);
    }

    refetch : function() {
        //do something
    }
});

setInterval 方法实际上不起作用,因为我想,this.refetchsetInterval 调用中无效。 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/

相关文章:

javascript - Internet Explorer 错误 SCRIPT1014 无效字符`

javascript - Backbone.js 为什么 DOM 在渲染函数中不可用?

javascript - 从主干 View 中调用 jquery 插件的方法

javascript - Backbone.extend 函数究竟是如何工作的?

javascript - 显式赋值后 JavaScript 中的变量未定义?

javascript - Google Analytics : Events sent, 但未出现在报告中

javascript - 如何修复此 "if"语句

javascript - 如何将 Ember 添加到 Phonegap 中的 onDeviceReady 事件?

rust - 返回闭包的函数在我的过滤器中不起作用

c# - 如何处理表达式树中的闭包和静态方法调用?