如何在singleton类中调用同级函数

how do I call sibling functions in a singleton class?

本文关键字:调用 函数 singleton      更新时间:2023-09-26

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

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("");
        }
    }
})();

我从以下方面开始:在JavaScript中实现singleton的最简单/最干净的方法?我现在找不到,但另一个问题是我从哪里得到self=this

this(因此self)只是指全局对象(即window)。这就是为什么会出现错误,没有全局add函数。我建议阅读MDN文档以了解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;
})();