我正在尝试阅读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 = {};
}
答案 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
定义开始。