麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

YUI模塊開發(fā)原理詳解

2019-11-20 21:40:19
字體:
供稿:網(wǎng)友

隨著互聯(lián)網(wǎng)應(yīng)用越來越重,js代碼越來越龐大,如何有效的去組織自己的代碼,變得非常重要。我們應(yīng)該學(xué)會去控制自己的代碼,而不是到最后一堆bug完全不知道從哪冒出來。前端的模塊化開發(fā)可以幫助我們有效的去管理代碼,特別是多人開發(fā)的時候,提高開發(fā)效率。

YUI生成模塊的方式是
YUI.add('module1', function (Y) { ... }, '1.0.0', requires: ['module2']);
YUI 是全局變量,類似于jquery中的$。add方法中第一個參數(shù)是模塊的名稱module1,第二個參數(shù)是一個匿名函數(shù),里面是模塊內(nèi)容,第三個參數(shù)是版本名,第四個requires表示的是模塊的依賴關(guān)系,如上是module1 依賴于module2(即module2要先于module1 執(zhí)行)。
通常每個模塊存放在一個js文件中,文件以模塊名來命名,即模塊module1存放在module1.js 文件中,module2存放在mudule2.js 文件中。
加載模塊module1:
// 加載YUI seed 文件,包含了YUI所有的依賴關(guān)系

復(fù)制代碼 代碼如下:

<scriptsrc="http://yui.yahooapis.com/3.13.0/build/yui/yui-min.js"></script>
<script>
  YUI().use('module1', function (Y) { ... });
</script>

下面就分析下上面這行代碼會發(fā)生什么事。
1)YUI 首先會分析module1 模塊存在的依賴關(guān)系,創(chuàng)建一個URL: http://localhost:3000/yui/combo?mudule2.js&module1.js。注意module2.js 在modul1.js 前面。
2)創(chuàng)建動態(tài)script標(biāo)簽,向服務(wù)器端請求js文件

復(fù)制代碼 代碼如下:

  var script = document.createElement('script');
  script = 'http://localhost:3000/yui/combo?mudule2.js&module1.js';
  if(script.readyState) {
    //IE
    script.onreadystatechange = function () {
      if (script.readyState == "loaded" || script.readyState == "complete"){
        script.onreadystatechange = null;
        //預(yù)留
      }
    };
  } else {
    //非IE
    script.onload = function () {
      //預(yù)留
    };
  }
  document.body.append(script);

3)服務(wù)器端檢測客戶端傳來的到請求,解析URL,然后開始尋找module2.js 和 module1.js 兩個js文件,并將兩個文件按順序拼成一個文件,返回給客戶端。最后傳回的js文件內(nèi)容如下:
  

復(fù)制代碼 代碼如下:

//module2.js 中的內(nèi)容
  YUI.add('module2', function (Y) { Y.module2 = {}; Y.module2.name = 'module2'; }, '1.0.0', requires: []);
  //module1.js 中的內(nèi)容
  YUI.add('module1', function (Y) { Y.module1 = {}; Y.module1.name = 'module1'; }, '1.0.0', requires: ['module2']);

4)客戶端接受到返回的js,開始解析,即執(zhí)行里面的YUI下的add方法,執(zhí)行過程大致如下:

復(fù)制代碼 代碼如下:

  YUI.modules = {};
  //module2
  YUI.modules.push(function (Y) { Y.module2 = {}; Y.module2.name = 'module2'; });
  //module1
  YUI.modules.push(function (Y) { Y.module1 = {}; Y.module1.name = 'module1'; });

5)解析完成后,自動觸發(fā)步驟2中onload方法(IE中為onreadystatechange方法),下面是步驟2中“預(yù)留”處的代碼:

復(fù)制代碼 代碼如下:

  for(var i = 0, len = YUI.modules.length; i < len; i++) {
    //將模塊中需要export出的api注冊在this下面;this是YUI的一個實例, this = new YUI();
    YUI.modules[i](this);
  }
  //callback 是YUI().use 中的回掉函數(shù)
  //此時模塊解析完成,傳入this參數(shù),在callback 就可以任意調(diào)用module1 和 module2 中輸出的api了
  callback(this);
 

以上是借助YUI對模塊化開發(fā)做一個簡單的介紹,YUI實際的過程比上面要復(fù)雜的多。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 精品国产一区二区三区久久久狼牙 | 男人的天堂视频网站 | 国产精品色综合 | 成人一区三区 | 成人不卡免费视频 | 国产日产精品一区四区介绍 | 成人在线激情视频 | 欧美国产一区二区三区 | 中日韩乱码一二新区 | 国产亚色| 99国产精品国产免费观看 | 色视频在线 | 国产亚洲欧美日韩在线观看不卡 | 久久久www成人免费毛片 | 久久亚洲精品视频 | 日本精品中文字幕 | 一区二区久久精品66国产精品 | 久久久久久久久久一本门道91 | 欧美激情猛片xxxⅹ大3 | 国产精品久久久久久久av | 999久久久| 久久99国产伦子精品免费 | 日韩1区| 爱射av | 欧美视频一区二区三区在线观看 | 国产精品视频六区 | 精品黑人一区二区三区国语馆 | 欧美一级做一级爱a做片性 久久久资源网 | xnxx 日本19 | 中文字幕亚洲一区二区三区 | 一本色道久久综合亚洲精品图片 | 一级黄色国产视频 | 日韩黄色精品视频 | 依依成人综合 | 欧美大胆xxxx肉体摄影 | av在线成人| 久久撸视频 | 国内精品国产三级国产a久久 | 欧美一级黄色片在线观看 | 国产1区视频| 91美女啪啪 |