成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

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

AMD設(shè)計(jì)出一個(gè)簡潔的寫模塊API:define 。

define(id?, dependencies?, factory);

其中:

◆ id: 模塊標(biāo)識(shí),可以省略。

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

◆ factory: 模塊的實(shí)現(xiàn),或者一個(gè)JavaScript對(duì)象。

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

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

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. }); 

以上同時(shí)演示了define的三種用法,

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

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

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

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

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

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

前面提到dependencies元素的順序和factory一一對(duì)應(yīng),其實(shí)不太嚴(yán)謹(jǐn)。AMD開始為擺脫CommonJS的束縛,開創(chuàng)性的提出了自己的模塊風(fē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導(dǎo)出API。

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

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

也有很多庫支持AMD規(guī)范,即將自己作為一個(gè)模塊存在,如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設(shè)計(jì)模式之代理模式
  4. 早該知道的7個(gè)JavaScript技巧
  5. JavaScript:根本沒有“JSON對(duì)象”這回事!
責(zé)任編輯:陳貽新 來源: snandy的博客
相關(guān)推薦

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-20 11:41:18

海豚瀏覽器

2012-03-19 17:25:22

2012-03-20 11:31:58

移動(dòng)瀏覽器

2013-01-14 10:58:51

傲游云瀏覽器

2010-12-21 10:11:35

手機(jī)瀏覽器

2012-03-19 17:17:00

移動(dòng)瀏覽器歐朋

2012-03-20 11:22:02

QQ手機(jī)瀏覽器

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

傲游手機(jī)瀏覽器

2016-09-21 14:24:37

3D全景瀏覽器瀏覽器

2012-08-14 17:07:13

2011-07-11 14:12:15

瀏覽器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久草免费在线视频 | 免费一级片| 午夜爱爱网 | 婷婷综合五月天 | 亚洲最大av网站 | 欧美成人性生活 | 99久久99| 精品国产乱码久久久久久蜜退臀 | 久久精品91久久久久久再现 | 亚洲天堂中文字幕 | 日韩成人免费av | 精品久久一区二区 | 亚洲一区二区三区四区五区午夜 | 日韩黄色免费 | 懂色av一区二区三区在线播放 | 欧美激情一区二区三级高清视频 | 福利在线观看 | 91 中文字幕 | 亚洲aⅴ | 国产精品自产av一区二区三区 | 岛国毛片在线观看 | 国产精品毛片一区二区在线看 | 亚洲成人免费观看 | 免费毛片网站在线观看 | 国产一级精品毛片 | 一区二区三区中文字幕 | 免费福利视频一区二区三区 | 草久久久 | 成人性视频免费网站 | 狠狠视频 | 精品久久久久久亚洲精品 | av免费成人 | 日韩第一夜| 奇米久久 | 毛片久久久| 免费观看一级视频 | 羞羞色在线观看 | 日韩欧美手机在线 | 六月色婷 | 成人天堂 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 |