亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

通過實(shí)例解析js簡易模塊加載器

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

前端模塊化

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

各種標(biāo)準(zhǔn)

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

簡易模塊加載器示例

G點(diǎn)來了!

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

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

以上是加載器的實(shí)現(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 + ",今天天氣不錯(cuò)噢";
return str;
}
return {
"sayHello2":sayHello2
}
})
console.log(Module.require('my_module').sayHello2())
console.log(Module.require('test').sayHello("steve"))

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

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

代碼分析

接下來我們?cè)敿?xì)來解析一下代碼原理。

加載器中的幾個(gè)重點(diǎn),

1.dule_list

module_list是一個(gè)對(duì)象,用于存儲(chǔ)定義的模塊,以模塊名:callback這樣
的鍵值對(duì)的形式存儲(chǔ);

2.fine函數(shù)

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

3.quire函數(shù)

由于我們的module_list存在于內(nèi)部作用域,保證了模塊的私密性,外部并不能
直接操作模塊列表去讀取模塊,因此我們定義了一個(gè)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 + ",今天天氣不錯(cuò)噢";
return str;
}
return {
"sayHello2":sayHello2
}
})

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

結(jié)語

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

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

相關(guān)文章

  • ES6 系列之 WeakMap的使用示例

    ES6 系列之 WeakMap的使用示例

    這篇文章主要介紹了ES6 系列之 WeakMap的使用示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • js寫一個(gè)字符串轉(zhuǎn)成駝峰的實(shí)例

    js寫一個(gè)字符串轉(zhuǎn)成駝峰的實(shí)例

    寫一個(gè)字符串轉(zhuǎn)成駝峰的方法,使用js代碼實(shí)現(xiàn),具體如下,感興趣的朋友可以了解下哈
    2013-06-06
  • javascript 中按屬性值查找數(shù)組中的對(duì)象多種方法

    javascript 中按屬性值查找數(shù)組中的對(duì)象多種方法

    JavaScript 數(shù)組可以保存混合類型的不同值,例如字符串、空值或布爾值,并且不需要數(shù)組的大小來指定它在哪里自動(dòng)增長和動(dòng)態(tài),這篇文章主要介紹了javascript 中按屬性值查找數(shù)組中的對(duì)象多種方法,需要的朋友可以參考下
    2023-06-06
  • 微信小程序?qū)崿F(xiàn)通過js操作wxml的wxss屬性示例

    微信小程序?qū)崿F(xiàn)通過js操作wxml的wxss屬性示例

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)通過js操作wxml的wxss屬性,結(jié)合實(shí)例形式分析了微信小程序使用js操作wxml的wxss屬性相關(guān)原理、實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2018-12-12
  • 使用JS進(jìn)行目錄上傳(相當(dāng)于批量上傳)

    使用JS進(jìn)行目錄上傳(相當(dāng)于批量上傳)

    腳本使用了WScript.Shell和Scripting.FileSystemObject的組件,所以必須要在IE下面和打開安全選項(xiàng)中運(yùn)行; 另外還用到了Jquery. 代碼只是客戶端代碼, 至于服務(wù)器的接收代碼網(wǎng)上好多了
    2010-12-12
  • JavaScript lodash常見用法系列小結(jié)

    JavaScript lodash常見用法系列小結(jié)

    本篇文章主要介紹了JavaScript lodash用法小結(jié),非常不錯(cuò),具有參考借鑒價(jià)值,對(duì)于Javascript lodash教程感興趣的同學(xué)可以參考一下
    2016-08-08
  • tsconfig.json配置詳解

    tsconfig.json配置詳解

    這篇文章主要介紹了tsconfig.json配置詳解,tsconfig.json文件中指定了用來編譯這個(gè)項(xiàng)目的根文件和編譯選項(xiàng),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • JavaScript 字符串連接性能優(yōu)化

    JavaScript 字符串連接性能優(yōu)化

    從多次測試結(jié)果看來,使用StringBuffer 可以節(jié)省50%以上的時(shí)間
    2008-12-12
  • 基于JavaScript實(shí)現(xiàn)繼承機(jī)制之原型鏈(prototype chaining)的詳解

    基于JavaScript實(shí)現(xiàn)繼承機(jī)制之原型鏈(prototype chaining)的詳解

    我們知道在JavaScript中定義類的原型方式,而原型鏈擴(kuò)展了這種方式,以一種有趣的方式實(shí)現(xiàn)繼承機(jī)制。prototype 對(duì)象是個(gè)模板,要實(shí)例化的對(duì)象都以這個(gè)模板為基礎(chǔ)??偠灾?,prototype 對(duì)象的任何屬性和方法都被傳遞給那個(gè)類的所有實(shí)例。原型鏈利用這種功能來實(shí)現(xiàn)繼承機(jī)制
    2013-05-05
  • 微信小程序?qū)崿F(xiàn)笑臉評(píng)分功能

    微信小程序?qū)崿F(xiàn)笑臉評(píng)分功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)笑臉評(píng)分功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11

最新評(píng)論