我有一个命名空间:Foo.Bar.Baz,其中有Qux类。这些是使用显示模块模式定义的:

Foo.Bar.Baz = (function ($) {  // the namespace/module

  function Qux() {             // the Qux "class" is contained in this namespace
  // ...
  }

  Qux.prototype.doStuff = function() {
  // ...
  }

  return {                     // public exports from this namespace
    Qux: Qux
  };

}(jQuery));


现在,在一个单独的文件中,我想将Quux类添加到此命名空间。我怎么做?当我使用与上述相同的模式时,它将被忽略,因为我猜一个模式会覆盖另一个模式。

最佳答案

由于已经将对象分配给Baz,因此只需创建一个新属性:

Foo.Bar.Baz.Quux = (function() {
    function private() {}
    var privateVar = 'whatever';

    return function() {
        // access private and privateVar
    };
}());


当然,Quux无法访问Qux的私有成员,这是问题吗?

编辑

如果要传递对象引用,则可以执行以下操作:

(function(module) {
    function private() {}
    var privateVar = 'whatever';

    module.Qux = function() {
      // whatever
    };

    module.Quux = function() {
      // different whatever
    };
}(Foo.Bar.Baz));


这两种方法在功能上是等效的。

关于javascript - 同一 namespace 中的多个“类”,但在单独的文件中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15398382/

10-10 04:13