如何在单例 class 中调用兄弟函数?

how do I call sibling functions in a singleton class?

在下面的代码中,.refresh 可以调用 .add,但我得到 Uncaught TypeError: undefined is not a function 我的猜测是因为它在创建 class 时没有定义,但如果这是真的,在不复制代码的情况下,是否有办法从同一个 [=21] 调用同级 public 函数=]?

var fileSelector = (function () {
    var self = this;
    function callback (data,status,xhr) {
        $("#File_Selector_Container").html(data);
        utils.setItem ("fileSelector", "TRUE");
    }
    return {
        refresh : function () {
            if (utils.getItem ("fileSelector") == "TRUE") {
                self.add();
            }
        },
        add : function () {
            $.get(script_name ,"AddFileSelector",callback,"html");
        },
        remove : function () {
            $("#File_Selector_Container").html("");
        }
    }
})();

我是从:Simplest/Cleanest way to implement singleton in JavaScript? 开始的,现在找不到了,但是另一个问题是我从 self=this 那里得到的。

this(因此 self)只是指全局对象(即 window)。这就是您收到错误的原因,没有全局 add 函数。我建议阅读 MDN documentation 以了解 this 的工作原理。

一个解决方案是保留对您要返回的对象的引用并改用它:

var fileSelector = (function () {
    function callback (data,status,xhr) {
        $("#File_Selector_Container").html(data);
        utils.setItem ("fileSelector", "TRUE");
    }
    var fileSelector = {
        refresh : function () {
            if (utils.getItem ("fileSelector") == "TRUE") {
                fileSelector.add();
            }
        },
        add : function () {
            $.get(script_name ,"AddFileSelector",callback,"html");
        },
        remove : function () {
            $("#File_Selector_Container").html("");
        }
    };

    return fileSelector;
})();