什么是创建JavaScript名称空间的最佳方式?

我还没有找到互联网上用JavaScript创建名称空间的常用方法。

创建名称空间的最佳方式是什么(请列出特定方法可能存在的任何问题)。


(function() {

    var usefulVariable;

    var foo = {
      bar:function(){ alert('hi') }
    };

    // leak into global namespace
    window.foo = foo;

})();

只有foo暴露于全局名称空间,并且它“存在于”执行匿名函数名称空间的私有自执行程序中。


在JavaScript中,命名空间只能通过对象文字实现,这可以像这样简单:

var MyNS = {
    f1: function() {...},
    f2: function() {...}
};

正如其他人试图说明的那样,如果您想在您的名称空间(建议)内提供私有作用域,则以下方法是最合适的:

var MyNS = (function() {
    var private1 = "...", 
        private2 = "...";

    return {
        f1: function() {...},
        f2: function() {...}
    }
})();

Pro JavaScript设计模式(Harmes&Diaz,2008)提供了使用简单对象文字或自动执行匿名函数的命名空间创建示例,这两个示例都在Justin Johnson的出色答案中进行了说明,并且这些方法运行良好。

根据情况,命名空间可能已经存在并且包含成员。 在这种情况下,这些方法会摧毁名称空间中的所有成员。 如果这是一个问题,可以使用类似于此的方法来保留任何现有成员,同时添加新成员:

var myNamespace = (function(ns) {
    ns.f1 = function() { ... };
    ns.f2 = function() { ... };

    return ns;
})(window.myNamespace || {});

在这里,myNamespace被分配由匿名,自我执行的函数返回的值,该函数接收参数ns。 可以看到,此参数的值是window.myNamespace或一个空对象,具体取决于是否先前已声明了myNamespace。

链接地址: http://www.djcxy.com/p/17069.html

上一篇: What's the best way to create a JavaScript namespace?

下一篇: Best way to define a function?