amd規範

http://www.cnblogs.com/snandy/archive/2012/03/12/2390782.htmljavascript

AMD設計出一個簡潔的寫模塊API:html

define(id?, dependencies?, factory);java

 

其中:jquery

  • id: 模塊標識,能夠省略。
  • dependencies: 所依賴的模塊,能夠省略。
  • factory: 模塊的實現,或者一個JavaScript對象。
id遵循CommonJS  Module Identifiers 。dependencies元素的順序和factory參數一一
//base.js
 define(function() { return { mix: function(source, target) { } }; }); //ui.js define(['base'], function(base) { return { show: function() { // todo with module base
 } } }); //page.js define(['data', 'ui'], function(data, ui) { // init here
}); //data.js define({ users: [], members: [] });

 

以上同時演示了define的三種用法
  1. 定義無依賴的模塊(base.js)
  2. 定義有依賴的模塊(ui.js,page.js)
  3. 定義數據對象模塊(data.js)
 
細心的會發現,還有一種沒有出現,即具名模塊
 
4,具名模塊

define('index', ['data','base'], function(data, base) {
// todo
});git

具名模塊多數時候是不推薦的,通常由打包工具合併多個模塊到一個js文件中時使用。
 
前面提到dependencies元素的順序和factory一一對應,其實不太嚴謹。AMD開始爲擺脫CommonJS的束縛,開創性的提出了本身的模塊風格。但後來又作了妥協,兼容了 CommonJS  Modules/Wrappings 。即又能夠這樣寫
 
5,包裝模塊 不考慮多了一層函數外,格式和Node.js是同樣的:使用require獲取依賴模塊,使用exports導出API。
define(function(require, exports, module) {
     var  base = require( 'base' );
     exports.show =  function () {
         // todo with module base
     }
});
 
除了define外,AMD還保留一個關鍵字require。 require 做爲規範保留的全局標識符,能夠實現爲 module loader,也能夠不實現。
 
目前,實現AMD的庫有 RequireJS 、 curl 、 Dojo 、 bdLoadJSLocalnet 、 Nodules 等。
也有不少庫支持AMD規範,即將本身做爲一個模塊存在,如 MooTools 、 jQuery 、 qwery 、 bonzo  甚至還有  firebug 。
相關文章
相關標籤/搜索