如何运行命名空间内的JavaScript函数

如何运行命名空间内的JavaScript函数,javascript,Javascript,如果我有这样的东西: App = { editingMode: function () { function setEditingMode(entityID) { $('#editingMode').val('1'); $.ajax({ type: "POST", url: "/Organisations/Manage/LockEntity/",

如果我有这样的东西:

App = {
    editingMode: function ()
    {
        function setEditingMode(entityID) {
            $('#editingMode').val('1');
            $.ajax({
                type: "POST",
                url: "/Organisations/Manage/LockEntity/",
                data: "entityID=" + entityID
            });
        }
        function setEditingModeOff(entityID) {
            if ($("#myform").valid() == true)
            {
                $('#editingMode').val('0');
                $.ajax({
                    type: "POST",
                    url: "/Organisations/Manage/UnlockEntity/",
                    data: "entityID=" + entityID
                });
            }
        }
    }
};
如何运行其中一个内部函数


App.editingMode()
但是在
设置编辑模式下,我该怎么做?

您需要返回一个引用,或者从函数外部访问它,例如,将它附加到
窗口
(有效地使其成为全局)或者
应用程序
对象。

您可以使用不同的结构来完成您想要的。我不知道它是否会破坏你正在使用的其他东西,所以我只给你举个例子。我不确定这是不是实际的解决方案,请看一看,并告诉我,如果这不是你需要的。 如果您使用:

 var App = {
                editingMode:
                {
                    setEditingMode: function(entityID) {
                        $('#editingMode').val('1');
                        $.ajax({
                            type: "POST",
                            url: "/Organisations/Manage/LockEntity/",
                            data: "entityID=" + entityID
                        });
                    },
                    setEditingModeOff: function(entityID) {
                        if ($("#myform").valid() == true)
                        {
                            $('#editingMode').val('0');
                            $.ajax({
                                type: "POST",
                                url: "/Organisations/Manage/UnlockEntity/",
                                data: "entityID=" + entityID
                            });
                        }
                    }
                }
            };
您可以这样调用editingMode的方法:

App.editingMode.setEditingModeOff(1);

请注意,它们仍将被封装在应用程序中,您不必将它们移动到全局范围。

尽管“Nikoloff”给出的答案允许您调用这些函数,但我要指出的是一种稍微不同(可能更好)的方法。 遵循“模块”模式概念不仅可以有效地解决问题,还可以让您拥有私有变量。(搜索“Javascript中的模块模式”,它将为您提供大量在线资源。)


如果这些函数实际上是私有的,那你就不能了。@Cameron名称空间仍然是个好主意。最好只有
App
global,然后才有几十个全局函数、对象等。我想这会管用的。但这几乎让我想知道为什么要使用名称空间:它总是有用的,我不认为我可以在注释中允许的字符数中列出好处。当您有一个包含数十个对象和数十个方法等的大型项目时,您会喜欢名称空间:)
App = {
    editingMode: function ()
    {       
        // Below var is no way directly accessible and act as private var
        var privateVar =5;
        // Below function is going to give access to private var
        function getPrivateVar(){
            return privateVar;
        }
        //Your functions - untouched
        function setEditingMode(entityID) {
            $('#editingMode').val('1');
            $.ajax({
                type: "POST",
                url: "/Organisations/Manage/LockEntity/",
                data: "entityID=" + entityID
            });
        }
        function setEditingModeOff(entityID) {
            if ($("#myform").valid() == true)
            {
                $('#editingMode').val('0');
                $.ajax({
                    type: "POST",
                    url: "/Organisations/Manage/UnlockEntity/",
                    data: "entityID=" + entityID
                });
            }
        }
        return {
            setEditingMode: setEditingMode,
            setEditingModeOff: setEditingModeOff,
            getPrivateVar: getPrivateVar
        }
    }
};

App.editingMode().setEditingMode();
console.log(App.editingMode().getPrivateVar());