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

AMD:瀏覽器中的模塊規范

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

Modules/Wrappings 使得實現變為現實。雖然和NodeJS的模塊寫法不完全一致,但也有很多相似之處,使得熟悉NodeJS的程序員有一些親切感。

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

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

define(id?, dependencies?, factory);

其中:

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

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

◆ factory: 模塊的實現,或者一個JavaScript對象。

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

以下是使用AMD模式開發的簡單三層結構(基礎庫/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,定義數據對象模塊(data.js)

細心的會發現,還有一種沒有出現,即具名模塊

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

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

前面提到dependencies元素的順序和factory一一對應,其實不太嚴謹。AMD開始為擺脫CommonJS的束縛,開創性的提出了自己的模塊風格。但后來又做了妥協,兼容了 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. }); 

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

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

目前,實現AMD的庫有RequireJS 、curl 、Dojo 、bdLoad、JSLocalnet 、Nodules 等。

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

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

【編輯推薦】

  1. 性能優化:如何更快速加載你的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-19 17:25:22

2012-03-20 11:31:58

移動瀏覽器

2012-03-20 11:41:18

海豚瀏覽器

2012-03-20 11:07:08

2010-12-21 10:11:35

手機瀏覽器

2013-01-14 10:58:51

傲游云瀏覽器

2012-06-21 15:38:02

獵豹瀏覽器

2012-03-19 17:17:00

移動瀏覽器歐朋

2012-03-20 11:22:02

QQ手機瀏覽器

2017-07-20 14:13:38

前端瀏覽器Native App

2015-07-23 10:17:27

瀏覽器內核

2012-05-07 14:11:30

Delphi

2012-03-20 11:35:32

傲游手機瀏覽器

2016-09-21 14:24:37

3D全景瀏覽器瀏覽器

2011-07-11 14:12:15

瀏覽器

2012-08-14 17:07:13

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲综合国产 | 欧美二区乱c黑人 | 国产精品久久久久久妇女 | 黄色精品 | 美女视频一区二区三区 | 国产丝袜一区二区三区免费视频 | 久草视频观看 | 国产精品成人国产乱一区 | 99reav| 午夜视频免费在线观看 | 一级毛片色一级 | 欧美激情一区二区三区 | 综合久久综合久久 | 麻豆久久久久久 | jizz视频| 亚洲小说图片 | 亚洲在线一区二区 | 一级片免费视频 | 波多野结衣电影一区 | av日日操| 久久99视频这里只有精品 | 日本一区二区三区四区 | 精精国产xxxx视频在线 | 午夜视频在线观看网址 | 激情欧美日韩一区二区 | 99久久精品免费看国产免费软件 | www.av7788.com | 视频一区二区中文字幕 | 911精品美国片911久久久 | 欧美精品一区二区在线观看 | 国产精品美女一区二区 | 日韩在线播放网址 | 2018国产精品 | 国产美女免费视频 | 玖玖免费 | 日韩视频区| 精品国产乱码久久久久久牛牛 | 中文二区| 国产999精品久久久影片官网 | 国产精品视频一 | 在线看亚洲 |