自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

AMD:瀏覽器中的模塊規(guī)范

開發(fā) 前端
前面提到,為實現(xiàn)與NodeJS相同方式的模塊寫法,大牛們做了很多努力。但由于瀏覽器環(huán)境不同于服務器端,它的模塊有一個HTTP請求過程。這個請求過程多數(shù)使用script tag,script tag默認的異步性導致很難實現(xiàn)與NodeJS一模一樣的模塊格式。

Modules/Wrappings 使得實現(xiàn)變?yōu)楝F(xiàn)實。雖然和NodeJS的模塊寫法不完全一致,但也有很多相似之處,使得熟悉NodeJS的程序員有一些親切感。

但NodeJS終究是服務器端的JavaScript,沒有必要把這些條條框框放到瀏覽器JavaScript環(huán)境中。這時AMD 誕生了,它的全稱為異步模塊定義。從名稱上看便知它是適合script tag的。也可以說AMD是專門為瀏覽器中JavaScript環(huán)境設計的規(guī)范。它吸取了CommonJS的一些優(yōu)點,但又不照搬它的格式。開始AMD作為CommonJS的transport format 存在,因無法與CommonJS開發(fā)者達成一致而獨立存在。它有獨立的wiki 和討論組 。

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

define(id?, dependencies?, factory);

其中:

◆ id: 模塊標識,可以省略。

◆ dependencies: 所依賴的模塊,可以省略。

◆ factory: 模塊的實現(xiàn),或者一個JavaScript對象。

id遵循CommonJS Module Identifiers 。dependencies元素的順序和factory參數(shù)一一對應。

以下是使用AMD模式開發(fā)的簡單三層結(jié)構(gòu)(基礎庫/UI層/應用層):

base.js

  1. define(function() { 
  2.     return { 
  3.         mix: function(source, target) { 
  4.         } 
  5.     }; 
  6. }); 

ui.js

  1. define(['base'], function(base) { 
  2.     return { 
  3.         show: function() { 
  4.             // todo with module base 
  5.         } 
  6.     } 
  7. }); 

page.js

  1. define(['data', 'ui'], function(data, ui) { 
  2.     // init here 
  3. }); 

data.js

  1. define({ 
  2.     users: [], 
  3.     members: [] 
  4. }); 

以上同時演示了define的三種用法,

1,定義無依賴的模塊(base.js)

2,定義有依賴的模塊(ui.js,page.js)

3,定義數(shù)據(jù)對象模塊(data.js)

細心的會發(fā)現(xiàn),還有一種沒有出現(xiàn),即具名模塊

  1. define('index', ['data','base'], function(data, base) { 
  2.     // todo 
  3. }); 

具名模塊多數(shù)時候是不推薦的,一般由打包工具合并多個模塊到一個js文件中時使用。

前面提到dependencies元素的順序和factory一一對應,其實不太嚴謹。AMD開始為擺脫CommonJS的束縛,開創(chuàng)性的提出了自己的模塊風格。但后來又做了妥協(xié),兼容了 CommonJS Modules/Wrappings 。即又可以這樣寫

  1. define(function(require, exports, module) { 
  2.     var base = require('base'); 
  3.     exports.show = function() { 
  4.         // todo with module base 
  5.     }  
  6. }); 

不考慮多了一層函數(shù)外,格式和NodeJS還比較象的。使用require獲取依賴模塊,使用exports導出API。

除了define外,AMD還保留一個關鍵字require。require 作為規(guī)范保留的全局標識符,可以實現(xiàn)為 module loader。也可以不實現(xiàn)。

目前,實現(xiàn)AMD的庫有RequireJS 、curl 、Dojo 、bdLoad、JSLocalnet 、Nodules 等。

也有很多庫支持AMD規(guī)范,即將自己作為一個模塊存在,如MooTools 、jQuery 、qwery 、bonzo 甚至還有 firebug 。

原文:http://www.cnblogs.com/snandy/archive/2012/03/12/2390782.html

【編輯推薦】

  1. 性能優(yōu)化:如何更快速加載你的JavaScript頁面
  2. 從此不再懼怕URI編碼:JavaScript及C# URI編碼詳解
  3. JavaScript設計模式之代理模式
  4. 早該知道的7個JavaScript技巧
  5. JavaScript:根本沒有“JSON對象”這回事!
責任編輯:陳貽新 來源: snandy的博客
相關推薦

2009-04-13 08:40:30

AMD瀏覽器Fusion Medi

2012-03-09 09:11:29

Node.js

2010-04-05 21:57:14

Netscape瀏覽器

2012-11-08 09:45:44

JavaScriptrequireJS

2012-03-20 11:07:08

2012-03-19 17:25:22

2012-03-20 11:41:18

海豚瀏覽器

2012-03-20 11:31:58

移動瀏覽器

2013-01-14 10:58:51

傲游云瀏覽器

2010-12-21 10:11:35

手機瀏覽器

2012-03-20 11:22:02

QQ手機瀏覽器

2012-03-19 17:17:00

移動瀏覽器歐朋

2012-06-21 15:38:02

獵豹瀏覽器

2017-07-20 14:13:38

前端瀏覽器Native App

2015-07-23 10:17:27

瀏覽器內(nèi)核

2012-05-07 14:11:30

Delphi

2012-03-20 11:35:32

傲游手機瀏覽器

2016-09-21 14:24:37

3D全景瀏覽器瀏覽器

2012-08-14 17:07:13

2011-07-11 14:12:15

瀏覽器
點贊
收藏

51CTO技術棧公眾號