javascript - 多个 "classes"位于同一命名空间中,但位于不同的文件中

标签 javascript module-pattern revealing-module-pattern

我有一个命名空间: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 的私有(private)成员,这是问题所在吗?

编辑

如果你想传入对象引用,你可以这样做:

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

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

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

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

关于javascript - 多个 "classes"位于同一命名空间中,但位于不同的文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15398382/

相关文章:

javascript - 我应该如何使用模块模式处理长 JavaScript 文件?

javascript - 如何在 Mac OS X Snow Leopard 中运行 XUL 应用程序?

javascript - 如何将数据从组件传递到包含数组的 .ts 文件?

vscode 中的 JavaScript 和 typescript 共享代码片段

javascript - 如何避免手动缓存返回错误的请求?

javascript - 模块模式-如何将一个模块的代码拆分到不同的js文件中?

javascript - 揭示模块模式添加子模块和访问私有(private)函数

javascript - 揭示模块模式和简单构造函数之间的区别

javascript - 如何在视频标签中添加按钮overLay