【问题标题】:Should I store object literals inside the jQuery namespace or the global namespace?我应该将对象文字存储在 jQuery 命名空间还是全局命名空间中?
【发布时间】:2011-08-18 13:19:37
【问题描述】:

试图清理我的一些脚本中的 jQuery $(document).ready 函数。我没有在该函数中包含许多函数,而是创建了一个对象字面量,该对象字面量具有我要添加到页面的功能的属性,如下所示:

var taskPage = {

    init: function() {

        this.validate();
        this.changeActivityType();
    },

    validate: function() {...
    },

    changeActivityType: function() {...
    }
};

我应该把这个对象字面量放在全局命名空间中,还是应该把这个对象放在 jQuery 命名空间中?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    全局命名空间是不行的!

    您可以将它包含在一个自动执行的匿名函数中。

    (function($){
        var taskPage = {
    
            init: function() {
    
                this.validate();
                this.changeActivityType();
            },
    
            validate: function() {...
            },
    
            changeActivityType: function() {...
            }
        };
    
        $(document).ready();
    
    })(jQuery);
    

    【讨论】:

    • 这样做!如果您需要向窗口公开任何内容(您不应该这样做),请执行 window.taskPage.validate = taskPage.valdiate
    • 好的,我还在纠结IIFS。当匿名函数执行时,taskPage 存储在哪里?如果我在 $(document).ready() 中执行 taskPage.init(),则未定义 taskPage var。如果我将 taskPage 作为新属性分配给 jQuery $.taskpage = {...} 它工作正常。
    • taskPage 是匿名函数范围内的变量,它不会泄漏到它之外。如果您在我上面提供的$(document).ready() 中执行taskPage.init(),它应该可以正常工作。不,不要将 taskPage 对象分配给 jQuery 对象。是working fine for me,你是怎么测试的?
    • 好的,你的小提琴把事情搞定了。我在匿名函数创建的闭包之外调用 $(document).read 。谢谢!
    • @Shef,最后一个问题。如果我想保留 taskPage 对象,这样我就可以调用它的 setterMethod 怎么办。例如,我有一些在我想在 taskPage 对象的属性中设置的 jsp 中动态生成的 json。
    猜你喜欢
    • 1970-01-01
    • 2012-03-04
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多