1

下面是我正在尝试做的一个伪示例

在非严格模式下这有效,但在严格模式下,当 setInterval 触发时,我得到一个未定义的错误。该脚本作为插件从另一个 jquery 脚本调用,然后调用 init 部分。

从这里阅读,这似乎是一个全局范围/上下文问题,但我不知道如何继续

(function($, window, document) {
    'use strict'; // remove and things work
    var opts,test;

    test = function(options) {
        opts = $.extend(test.prototype.opts, test.prototype.defaults, options);
    };

    test.prototype.Save = function () {
        console.log('hi');
    };

    test.prototype.defaults = {
        _interval_id: null
    };

    test.prototype.opts = {};

    $.bla.plugins.foobar = function() {
        var base = this,
            bar;

        base.init = function() {
            bar = new test();
            opts = test.prototype.opts;
            bar.Save(); // works
            opts._interval_id = setInterval('bar.Save();', 10000); //  called but bar is not defined
        };
    };
})(jQuery, window, document);
4

1 回答 1

1

当一个字符串被 解释时setInterval,它在全局范围内,而不是调用它的函数的范围内。传递要调用的实际函数,而不是字符串:

setInterval(bar.Save, 10000);

如果您允许bar或被bar.Save修改,并且您希望自动获取更改,您应该传递一个每次重新评估它的函数:

setInterval(function() { bar.Save(); }, 10000);
于 2013-04-20T17:36:43.187 回答