【问题标题】:Splitting a JavaScript namespace into multiple files将 JavaScript 命名空间拆分为多个文件
【发布时间】:2011-07-06 05:27:20
【问题描述】:

假设我有一个这样的命名空间:

var myNamespace = {
    foo: function() {
    },
    bar: function() {
    }
};

将此代码拆分为分别定义foobar 的文件的最佳方法是什么?

我不担心加载时间 - 我会在部署之前将其连接回一个文件。

【问题讨论】:

标签: javascript namespaces code-organization


【解决方案1】:

在每个文件的开头:

if(myNameSpace === undefined) {
  var myNameSpace = {};
}

文件 1:

myNamespace.foo = function()...

文件 2:

myNamespace.bar = function()...

【讨论】:

    【解决方案2】:
    // File1:
    // top level namespace here:
    var myNamespace = myNamespace || {};
    
    // File2:
    myNamespace.foo = function() {
        // some code here...
    }
    

    【讨论】:

      【解决方案3】:

      在每个文件中遵循以下模式:

      (function(nameSpace) {
          nameSpace.foo = function() { ... };
      })(window.nameSpace = window.nameSpace || {});
      

      这种方式加载顺序并不重要。

      【讨论】:

        【解决方案4】:

        在单独的文件中进行简单定义,如下所示:

        文件 1:

        var myNamspace = {};
        

        文件 2:

        myNamespace.foo = function()...
        

        文件 3:

        myNamespace.boo = function()...
        

        只要确保以正确的顺序加载文件即可。

        【讨论】:

          【解决方案5】:
          (function (NS) {
              NS.Uber = function Uber() {
                  this.super = new NS.Super(); // yes, it works!
              }; //
          }(NS = NS || {}));
          
          // ------------- other file -----------------
          
          (function (NS) {
              NS.Super = function Super() {
                  this.uber = new NS.Uber(); // yes, it will also work!
              }; //
          }(NS = NS || {}));
          
          // -------------- application code ------------
          
          var uber = new NS.Uber();
          console.log(uber.super);
          
          var super = new NS.Super();
          console.log(super.uber);
          

          【讨论】:

          • NS = NS || {} 表示它将 NS 作为参数发送,如果不存在,则将空对象分配给 NS。
          • 这会触发一个引用错误:当试图执行}(NS = NS || {}));see this jsfiddle for example这一行时,NS 是未定义的
          猜你喜欢
          • 2011-06-09
          • 2015-10-04
          • 2023-03-14
          • 1970-01-01
          • 1970-01-01
          • 2021-04-27
          • 1970-01-01
          • 2011-03-28
          相关资源
          最近更新 更多