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

时间:2011-10-10 11:42:30

标签: javascript

如果我有类似的话:

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();但是我该怎样做才能获得setEditingMode ??

3 个答案:

答案 0 :(得分:8)

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

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

请注意,它们仍将封装在App中,您不必将它们移动到全局范围。

答案 1 :(得分:0)

您需要返回对一个引用的引用,或者使其可以从函数外部访问,例如,将其附加到window(有效地使其成为全局)或App对象。

答案 2 :(得分:0)

虽然'Nikoloff'给出的答案可以让你调用这些功能,但我会指出有点不同(可能更好)的方法。 遵循“模块”模式概念不仅可以有效地解决您的问题,还可以让您拥有私有变量。 (在Javascript中搜索'模块模式',它将为您提供大量在线资源。)

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