1

我正在尝试阅读 Backbone.js 的源代码。我对下面的代码感到很困惑,它应该声明 Backbone 的顶级命名空间。任何人都可以提供一些线索或解释吗?一些有用的链接来指教这个也很受欢迎!

// The top-level namespace. All public Backbone classes and modules will
  // be attached to this. Exported for both CommonJS and the browser.
  var Backbone;
  if (typeof exports !== 'undefined') {
    Backbone = exports;
  } else {
    Backbone = root.Backbone = {};
  }
4

1 回答 1

3

exports是用于模块化提供代码的 CommonJS 模式全局(想想 require.js 和 node.js)。最重要的检查是查看是否exports可用。如果是,则为 Backbone 全局提供导出引用,以便可以正确地模块化导出。

如果你不是通过 AMD 风格的加载器加载 Backbone,它是由标准对象字面量定义的。

关于此事的进一步阅读:

http://dailyjs.com/2010/10/18/modules/

Node.js module.exports 的用途是什么,你如何使用它?

Javascript 中的导出和原型是什么?

进一步说明:

exports除了普通的对象文字之外,它本身还带有一些额外的“健壮性”。CommonJS 模块化模式需要这种“健壮性”。请注意 Node.js 源代码中的此处:

function Module(id, parent) {
  this.id = id;
  this.exports = {};
  this.parent = parent;
  if (parent && parent.children) {
    parent.children.push(this);
  }

  this.filename = null;
  this.loaded = false;
  this.children = [];
}

module.exports = Module;

Backbone全局可以访问模块化模式所需的所有第三级深度。否则,Backbone只会从一个无聊的旧空object定义开始。

于 2013-01-03T04:55:10.290 回答