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

时间:2015-03-02 22:57:06

标签: javascript object singleton siblings

在以下代码中,.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("");
        }
    }
})();

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

1 个答案:

答案 0 :(得分:1)

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