2013-01-03 47 views
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 = {}; 
    } 

回答

3

exports是CommonJS的圖案全局(認爲require.js和的node.js),其用於提供模塊化的代碼。頂部檢查看看是否有exports可用。如果是這樣,Backbone global會給出出口引用,所以它可以被模塊化地正確導出。

如果您未通過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本身帶有一些額外的 「beefiness」 超過正常對象常量。 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定義開始。

+0

謝謝您的詳細解答。但我並不十分清楚「Backbone global是否有出口參考,因此它可以模塊化地正確導出」。爲什麼使用「骨幹=導出」而不是「出口= root.backbone」? – lkahtz

+1

我更新了我的答案。 – dclowd9901