顶级命名空间和Backbone源代码导出的使用

时间:2013-01-03 04:49:43

标签: javascript backbone.js namespaces

我正在尝试阅读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 = {};
  }

1 个答案:

答案 0 :(得分:3)

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

如果您没有通过AMD风格的加载器加载Backbone,它将由标准对象文字定义。

进一步阅读此事:

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

What is the purpose of Node.js module.exports and how do you use it?

What is exports and prototype in 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定义开始。