亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

seaJs的模塊定義和模塊加載淺析

2019-11-20 14:46:24
字體:
來源:轉載
供稿:網友

SeaJS 是由玉伯開發的一個遵循 CommonJS 規范的模塊加載框架,可用來輕松愉悅地加載任意 JavaScript 模塊和css模塊樣式。SeaJS非常小巧,小巧在于壓縮和gzip后體積只有4K,而且接口和方法也非常少,SeaJS 就兩個核心:模塊定義和 模塊的加載及依賴關系。SeaJS非常強大,SeaJS可以加載任意 JavaScript 模塊和css模塊樣式,SeaJS會保證你在使用一個模塊時,已經將所依賴的其他模塊載入到腳本運行環境中。玉伯的說法,SeaJS可以讓你享受寫代碼的樂趣,不用去管那些加載的問題。你是否厭倦了如此多的js和css引用,我數了一下我們公司網站的個人主頁首頁上有39個css和js引用,帶來的影響可想而知:

1.不利于維護,前端后端都一樣
2.http請求過多,當然這個可以通過合并解決,但是如果沒有后端直接合并,人工成本非常大,就算后端合并,維護的時候,這么長的一個字符串,眼睛肯定看花

用SeaJS就能非常好的解決這些問題。

模塊的定義define

定義一個模塊比較簡單,例如定義一個sayHello模塊,建一個sayHello.js文檔:

復制代碼 代碼如下:

define(function(require,exports,module){
 exports.sayHello = function(eleID,text) {
  document.getElementById(eleID).innerHTML=text;
 };
});

這里先看一下exports參數,exports參數是用來向外提供模塊的 API.也就是通過這個exports其他的模塊就能訪問sayHello方法。

模塊的加載use

例如我們頁面上有一個id為“out”的元素,要輸出“Hello SeaJS!”,
那么我們可以先引入sea.js
然后使用sayHello模塊:

復制代碼 代碼如下:

seajs.use("sayHello/sayHello",function(say){
 say.sayHello("out","Hello SeaJS!");
});

這里的use就是使用模塊的方法:

第一個參數就是模塊表示,他是相對于sea.js的相對路徑來表示,sayHello.js后面的“.js”后綴可以省略,當然這個模塊標識還有很多方法,具體查看官方說明:http://seajs.com/docs/zh-cn/module-identifier.html
第一個參數是一個callback函數。say.sayHello()就是調用sayHello模塊的exports.sayHello方法,當然這callback函數中有個say參數。

模塊的依賴關系

模塊的依賴其實在模塊定義的時候就應該存在了。比如說把上面的sayHello模塊改寫一下,假設我們已經有了一個通用的DOM模塊,比如一些獲取元素,設置樣式等方法,例如這么一個DOM模塊,如下編寫DOM.js

復制代碼 代碼如下:

define(function(require, exports, module) {
    var DOM = {
        /**
* 通過元素的id屬性獲取DOM對象,參數為字符串,或多個字符串
* @id getById
* @method getById
* @param {String} id the id attribute
* @return {HTMLElement | Object} The HTMLElement with the id, or null if none found.
*/
        getById: function() {
            var els = [];
            for (var i = 0; i < arguments.length; i++) {
                var el = arguments[i];
                if (typeof el == "string") {
                    el = document.getElementById(el);
                }
                if (arguments.length == 1) {
                    return el;
                }
                els.push(el);
            }
            return els;
        },
        /**
* get 獲取對象,可以傳入對象或字符串,如果傳入字符串者以document.getElementById()的方式獲取對象
* @id get
* @param {String} el html element
* @return {Object} HTMLElement object.
*/
        get: function(el) {
            if (el & amp; amp; amp; & amp; amp; amp; (el.tagName || el.item)) {
                return el;
            }
            return this.getById(el);
        }
    };
    return DOM;
});

那么sayHello模塊可以這樣編寫,為了不影響原來的demo頁面,所以我定一個新的sayHelloA模塊,我們可以這樣編寫sayHelloA.js:
復制代碼 代碼如下:

define(function(require, exports, module) {
    var DOM = require("DOM/DOM");
    require("sayHelloA/sayHello.css");
    exports.sayHello = function(eleID, text) {
        DOM.get(eleID).innerHTML = text;
    };
});

require 函數就是用來建立模塊的依賴關系,比如上面sayHelloA模塊,就是依賴于DOM模塊,因為用到了DOM模塊的get方法。
注意這里的var DOM=require("DOM/DOM"),這句是將應用進來的DOM模塊賦值給DOM;require("sayHelloA/sayHello.css")是直接應用sayHello.css css模塊或者說文件。這樣頁面上會引用這個css文件。

最近這幾天一直搗騰SeaJS,越搗騰越喜歡,感謝玉伯!感謝SeaJS!當然你可能覺得這么簡單的幾個實例沒必要這么做。確實如果js文件少的小項目感覺不錯模塊化的優勢,但是,更多的在js文件多或著中型以上項目這個模塊化的優勢就體現出來了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品久久久免费| 欧美香蕉大胸在线视频观看| 欧美一区二区三区免费视| 国产精品久久久久久久av电影| 中文字幕亚洲欧美在线| 伊人成人开心激情综合网| 久久视频在线直播| 国产免费一区视频观看免费| 色香阁99久久精品久久久| 久久精品国产96久久久香蕉| 日韩禁在线播放| 国产精品亚洲аv天堂网| 18性欧美xxxⅹ性满足| 亚洲美女av黄| 中文字幕一区二区精品| 亚洲综合在线小说| 欧美怡春院一区二区三区| 国产精品免费久久久久久| 久久色在线播放| 欧美在线不卡区| 爱福利视频一区| 亚洲黄色成人网| 亚洲大胆美女视频| 久久精品久久精品亚洲人| 7m第一福利500精品视频| 欧美大片在线影院| 欧美在线影院在线视频| 久久久久久高潮国产精品视| 国产精品一区二区性色av| 91亚洲一区精品| 欧美日韩亚洲视频| 亚洲成人性视频| 日韩经典第一页| 国产精品免费电影| 亚洲国产成人在线视频| 中文字幕成人在线| 国产视频综合在线| 亚洲精品天天看| 亚洲男人av在线| 亚洲美腿欧美激情另类| 国产精自产拍久久久久久蜜| 日韩av在线播放资源| 午夜美女久久久久爽久久| 国产成人精品在线| 亚洲欧洲黄色网| 久久精品夜夜夜夜夜久久| 毛片精品免费在线观看| 成人免费网视频| 欧美日韩一区二区在线播放| 97国产精品久久| 精品久久香蕉国产线看观看亚洲| 久久久爽爽爽美女图片| 色综合老司机第九色激情| 日韩中文字幕国产| 91香蕉电影院| 欧美日韩一区二区免费在线观看| 成人黄色在线播放| 亚洲一区美女视频在线观看免费| 精品亚洲一区二区三区在线观看| 91美女片黄在线观看游戏| 精品久久久久久中文字幕一区奶水| 国产精品美女免费视频| 久久影视免费观看| 疯狂做受xxxx高潮欧美日本| 在线视频欧美日韩精品| 中文字幕亚洲自拍| 国产精品久久久久久久电影| 国产精品视频自拍| 国产精品美女在线观看| 国产91在线高潮白浆在线观看| 不卡伊人av在线播放| 亚洲精品中文字幕av| 亚洲人精品午夜在线观看| 欧美日韩美女在线| 欧美日韩国产精品一区二区不卡中文| 国产日本欧美一区二区三区| 国产91精品最新在线播放| 精品福利免费观看| 欧美激情视频在线免费观看 欧美视频免费一| 欧美成人剧情片在线观看| 亚洲精品mp4| 亚洲精品免费在线视频| 国产精品久久久久久久久久久久久| 在线成人中文字幕| 亚洲国产高清福利视频| 欧美一级片一区| 中文字幕精品视频| 538国产精品视频一区二区| 国产做受69高潮| 欧美性猛交xxxx| 中文字幕亚洲国产| 国产日韩欧美在线视频观看| 欧美日韩中国免费专区在线看| 伊人伊成久久人综合网站| 欧美激情一区二区三区久久久| 亚洲国产精品久久久久| 亚洲免费电影在线观看| 中日韩午夜理伦电影免费| 欧美激情在线观看| 精品久久香蕉国产线看观看亚洲| 亚洲精品国精品久久99热| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲欧洲成视频免费观看| 97精品久久久中文字幕免费| 91免费精品国偷自产在线| 国产日韩中文在线| 欧美黄色成人网| 亚洲成人av片| 一道本无吗dⅴd在线播放一区| 欧美日本黄视频| 日韩精品一区二区视频| 欧美午夜精品在线| 久久久久中文字幕| 91香蕉嫩草神马影院在线观看| 久久免费福利视频| 色婷婷综合久久久久中文字幕1| 午夜精品久久久久久久99热浪潮| 国产精品免费视频xxxx| 国产精品99久久99久久久二8| 中文字幕亚洲激情| 亚洲性日韩精品一区二区| 日韩av电影在线播放| 最近2019中文字幕大全第二页| 亚洲午夜性刺激影院| 日韩电影中文字幕av| 茄子视频成人在线| 亚洲在线免费看| 91久久久久久| 亚洲成人免费在线视频| 亚洲free性xxxx护士白浆| 亚洲精品99久久久久| 国产美女被下药99| 国产在线视频2019最新视频| 成人中心免费视频| 久久久久久久久久久成人| 久久夜色精品国产亚洲aⅴ| 91视频九色网站| 久久久久久91香蕉国产| 国产福利精品av综合导导航| 国产偷亚洲偷欧美偷精品| 91视频国产一区| 欧美午夜激情在线| 欧美www在线| 日韩中文字幕不卡视频| 91久久精品国产91久久性色| 欧美国产亚洲精品久久久8v| 欧美伊久线香蕉线新在线| 成人444kkkk在线观看| 日韩欧美国产网站| 久久久久999| 欧美午夜视频在线观看| 国产日韩欧美电影在线观看| 日韩有码在线观看| 中文字幕亚洲图片| 韩日精品中文字幕| 久久亚洲精品国产亚洲老地址| 91麻豆桃色免费看| 精品久久香蕉国产线看观看gif| 一区二区国产精品视频| 国产精品中文字幕在线| 日韩中文字幕在线免费观看| 国产精品吹潮在线观看| 欧美精品在线第一页| 国产欧美日韩中文字幕|