最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

通過實例解析js簡易模塊加載器

 更新時間:2019年06月17日 10:27:02   作者:cucumber  
這篇文章主要介紹了通過實例解析js簡易模塊加載器,隨著前端工程越來越復(fù)雜,代碼越來越多,模塊化成了必不可免的趨勢。,需要的朋友可以參考下

前端模塊化

關(guān)注前端技術(shù)發(fā)展的各位親們,肯定對模塊化開發(fā)這個名詞不陌生。隨著前端工程越來越復(fù)雜,代碼越來越多,模塊化成了必不可免的趨勢。

各種標(biāo)準

由于javascript本身并沒有制定相關(guān)標(biāo)準(當(dāng)然es6已經(jīng)有了import和export),所以在模塊化方面誕生了各種不同的規(guī)范。主要有AMD規(guī)范(隨requirejs誕生而普及),CMD規(guī)范(隨seajs的出現(xiàn)而普及),commonjs(主要用于node,并不適合前端)。至于以上幾種規(guī)范的異同,無恥的我在這里就不多費口水了,請還不了解的親們自行去找google爸爸。

簡易模塊加載器示例

G點來了!

接下來我們先來看一段建議模塊加載器的示例代碼:

let Module = (() => {
let module_list = {};
function define(name,rely,callback){
if (module_list[name]){
console.log("The module have already existed!")
}else{
for(let i = 0;i < rely.length;i++){
rely[i] = module_list[rely[i]];
}
module_list[name] = callback.apply(callback,rely);
}
}
function require(name){
if (module_list[name]){
return module_list[name]
}else{
console.log("There is no such module!")
}
}
let api = {
"define":define,
"require":require
};
return api;
})();

以上是加載器的實現(xiàn),再來看看如何使用吧:

Module.define("test",[],()=>{
function sayHello(name){
return name+",你好啊";
}
return {
"sayHello":sayHello
}
})
Module.define("haha",[],()=>{
function gotoHZ(name){
return name+"要去杭州玩了";
}
return {
"gotoHZ":gotoHZ
}
})
Module.define("my_module",["test","haha"],(test,haha)=>{
let name = "andrew";
function sayHello2() {
let str = test.sayHello(name);
console.log(haha.gotoHZ("章煒"))
str = str + ",今天天氣不錯噢";
return str;
}
return {
"sayHello2":sayHello2
}
})
console.log(Module.require('my_module').sayHello2())
console.log(Module.require('test').sayHello("steve"))

在以上代碼中,我們定義了三個模塊,分別名為test,haha,my_module??吹竭@里的你,如果js基礎(chǔ)不好,可能是一臉懵逼,腦子繞暈...先不急,讓我們來看看運行的結(jié)果:

結(jié)果很簡單,打印了一些我們想要的信息。

代碼分析

接下來我們詳細來解析一下代碼原理。

加載器中的幾個重點,

1.dule_list

module_list是一個對象,用于存儲定義的模塊,以模塊名:callback這樣
的鍵值對的形式存儲;

2.fine函數(shù)

然后我們定義了一個define函數(shù),其三個參數(shù)分別為模塊名、此模塊依賴列表、此模塊回調(diào)函數(shù),當(dāng)我們調(diào)用define函數(shù)時,首先先去檢查module_list對
象中是否已經(jīng)有同名模塊,如果有,直接告訴用戶該模塊名字已被使用,如果沒有,我們循環(huán)依賴列表rely,循環(huán)中的操作用于將依賴列表從名稱列表轉(zhuǎn)換為真正的模塊列表,然后利用apply函數(shù),將其逐個傳入到定義好的callback函數(shù)中。

3.quire函數(shù)

由于我們的module_list存在于內(nèi)部作用域,保證了模塊的私密性,外部并不能
直接操作模塊列表去讀取模塊,因此我們定義了一個require函數(shù),利用閉包來讀取操作相應(yīng)模塊

4.解析

Module.define("my_module",["test","haha"],(test,haha)=>{
let name = "andrew";
function sayHello2() {
let str = test.sayHello(name);
console.log(haha.gotoHZ("章煒"))
str = str + ",今天天氣不錯噢";
return str;
}
return {
"sayHello2":sayHello2
}
})

這里我們定義了my_module模塊,它依賴的模塊有test、haha兩個模塊,而在回調(diào)函數(shù)中,我們將這兩個模塊傳入,可以看到我們能調(diào)用test模塊的sayHello方法,可以調(diào)用haha模塊的gotoHZ方法,至此,一個簡單的模塊加載器就實現(xiàn)了。

結(jié)語

這個簡單的模塊加載器只是很簡化的介紹了模塊加載器實現(xiàn)的基本原理,成熟的模塊加載器當(dāng)然是要復(fù)雜得多,但是原理了解了,才是最重要,不是嘛~

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JS onkeypress兼容性寫法詳解

    JS onkeypress兼容性寫法詳解

    這篇文章主要為大家詳細介紹了JS onkeypress兼容性的寫法,感興趣的小伙伴們可以參考一下
    2016-04-04
  • JavaScript中點擊事件的寫法

    JavaScript中點擊事件的寫法

    這篇文章主要介紹了JavaScript中點擊事件的寫法的相關(guān)資料,其中還給大家分享js觸發(fā)按鈕點擊功能的實現(xiàn),本文介紹的非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • TypeScript泛型使用詳細介紹

    TypeScript泛型使用詳細介紹

    泛型是靜態(tài)類型語言的基本特征,允許將類型作為參數(shù)傳遞給另一個類型、函數(shù)、或者其他結(jié)構(gòu)。TypeScript 支持泛型作為將類型安全引入組件的一種方式。這些組件接受參數(shù)和返回值,其類型將是不確定的,直到它在代碼中被使用
    2022-10-10
  • 淺談javascript中return語句

    淺談javascript中return語句

    這篇文章主要給大家簡單介紹了javascript中return語句,有需要的小伙伴可以參考下。
    2015-07-07
  • 生成二維碼方法匯總

    生成二維碼方法匯總

    這篇文章主要匯總介紹了生成二維碼方法的相關(guān)資料,需要的朋友可以參考下
    2014-12-12
  • 如何用JS取得網(wǎng)址中的文件名

    如何用JS取得網(wǎng)址中的文件名

    如何用JS取得網(wǎng)址中的文件名...
    2006-08-08
  • 原生js實現(xiàn)給指定元素的后面追加內(nèi)容

    原生js實現(xiàn)給指定元素的后面追加內(nèi)容

    給指定元素的后面追加一些自己想要實現(xiàn)的效果或者是一些屬性之類的,有木有遇到過,接下來為大家詳細介紹下追加的實現(xiàn)代碼,感興趣的朋友可以參考下哈
    2013-04-04
  • JS實現(xiàn)深拷貝的4種方式介紹

    JS實現(xiàn)深拷貝的4種方式介紹

    這篇文章主要給大家介紹了關(guān)于JS實現(xiàn)深拷貝的4種方式,深拷貝是指將一個對象完整地拷貝一份,不受原對象影響,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • JS設(shè)置手機驗證碼60s等待實現(xiàn)代碼

    JS設(shè)置手機驗證碼60s等待實現(xiàn)代碼

    本文給大家分享JS設(shè)置手機驗證碼60s等待實現(xiàn)代碼,需要的朋友參考下吧
    2017-06-06
  • weui框架實現(xiàn)上傳、預(yù)覽和刪除圖片功能代碼

    weui框架實現(xiàn)上傳、預(yù)覽和刪除圖片功能代碼

    weui框架暫時只有css文件,并沒有js文件實現(xiàn)其功能,我在其html+css后面增加了js實現(xiàn)其功能,為大家提供方便,也為自己保存記錄。具體實例代碼大家參考下本文
    2017-08-08

最新評論

蓝山县| 将乐县| 永济市| 江陵县| 南澳县| 司法| 墨玉县| 米脂县| 嘉义县| 乌恰县| 乐至县| 栖霞市| 凭祥市| 延吉市| 张家口市| 定西市| 克山县| 阿拉善左旗| 建瓯市| 板桥市| 益阳市| 吉林市| 宁陕县| 罗源县| 商南县| 搜索| 拉萨市| 兴宁市| 北京市| 新巴尔虎右旗| 彰武县| 剑阁县| 巴林左旗| 扶风县| 宁陵县| 枝江市| 福安市| 嵊州市| 松桃| 康平县| 三明市|