ES6核心內(nèi)容(下)

打鐵要趁熱老厌,今天我們繼續(xù)講es6其他幾個(gè)非常有用的新特性趣斤。

import export

這兩個(gè)家伙對(duì)應(yīng)的就是es6自己的module功能纽窟。

我們之前寫(xiě)的Javascript一直都沒(méi)有模塊化的體系酒来,無(wú)法將一個(gè)龐大的js工程拆分成一個(gè)個(gè)功能相對(duì)獨(dú)立但相互依賴(lài)的小工程啡浊,再用一種簡(jiǎn)單的方法把這些小工程連接在一起。

這有可能導(dǎo)致兩個(gè)問(wèn)題:

一方面js代碼變得很臃腫毙籽,難以維護(hù)

另一方面我們常常得很注意每個(gè)script標(biāo)簽在html中的位置洞斯,因?yàn)樗鼈兺ǔS幸蕾?lài)關(guān)系,順序錯(cuò)了可能就會(huì)出bug

在es6之前為解決上面提到的問(wèn)題坑赡,我們得利用第三方提供的一些方案,主要有兩種CommonJS(服務(wù)器端)和AMD(瀏覽器端么抗,如require.js)毅否。


而現(xiàn)在我們有了es6的module功能,它實(shí)現(xiàn)非常簡(jiǎn)單蝇刀,可以成為服務(wù)器和瀏覽器通用的模塊解決方案螟加。


ES6模塊的設(shè)計(jì)思想,是盡量的靜態(tài)化,使得編譯時(shí)就能確定模塊的依賴(lài)關(guān)系捆探,以及輸入和輸出的變量然爆。CommonJS和AMD模塊,都只能在運(yùn)行時(shí)確定這些東西黍图。


傳統(tǒng)的寫(xiě)法


首先我們回顧下require.js的寫(xiě)法曾雕。假設(shè)我們有兩個(gè)js文件:index.js和content.js,現(xiàn)在我們想要在index.js中使用content.js返回的結(jié)果,我們要怎么做呢助被?

首先定義:

//content.js

define('content.js', function(){

? ? return 'A cat';

})


然后require:

//index.js

require(['./content.js'], function(animal){

? ? console.log(animal);? //A cat

})

那CommonJS是怎么寫(xiě)的呢剖张?

//index.js

var animal = require('./content.js')

//content.js

module.exports = 'A cat'

ES6的寫(xiě)法

//content.js

export default 'A cat'? ?

export function say(){

? ? return 'Hello!'

}? ?

export const type = 'dog'

以上我把三者都列出來(lái)了,再也不用擔(dān)心我寫(xiě)混淆了...


ES6 module的其他高級(jí)用法

//content.js

export default 'A cat'? ?

export function say(){

? ? return 'Hello!'

}? ?

export const type = 'dog'

上面可以看出揩环,export命令除了輸出變量搔弄,還可以輸出函數(shù),甚至是類(lèi)(react的模塊基本都是輸出類(lèi))

//index.js

import { say, type } from './content'?

let says = say()

console.log(`The ${type} says ${says}`)? //The dog says Hello

這里輸入的時(shí)候要注意:大括號(hào)里面的變量名丰滑,必須與被導(dǎo)入模塊(content.js)對(duì)外接口的名稱(chēng)相同顾犹。

如果還希望輸入content.js中輸出的默認(rèn)值(default), 可以寫(xiě)在大括號(hào)外面。

//index.js

import animal, { say, type } from './content'?

let says = say()

console.log(`The ${type} says ${says} to ${animal}`)?

//The dog says Hello to A cat

修改變量名

此時(shí)我們不喜歡type這個(gè)變量名褒墨,因?yàn)樗锌赡苤孛脑晕覀冃枰薷囊幌滤淖兞棵T趀s6中可以用as實(shí)現(xiàn)一鍵換名貌亭。

//index.js

import animal, { say, type as animalType } from './content'?

let says = say()

console.log(`The ${animalType} says ${says} to ${animal}`)?

//The dog says Hello to A cat

模塊的整體加載


除了指定加載某個(gè)輸出值柬唯,還可以使用整體加載,即用星號(hào)(*)指定一個(gè)對(duì)象圃庭,所有輸出值都加載在這個(gè)對(duì)象上面锄奢。

//index.js

import animal, * as content from './content'?

let says = content.say()

console.log(`The ${content.type} says ${says} to ${animal}`)?

//The dog says Hello to A cat

通常星號(hào)*結(jié)合as一起使用比較合適。

終極秘籍


考慮下面的場(chǎng)景:上面的content.js一共輸出了三個(gè)變量(default, say, type),假如我們的實(shí)際項(xiàng)目當(dāng)中只需要用到type這一個(gè)變量剧腻,其余兩個(gè)我們暫時(shí)不需要拘央。我們可以只輸入一個(gè)變量:

import{type}from'./content'

由于其他兩個(gè)變量沒(méi)有被使用,我們希望代碼打包的時(shí)候也忽略它們书在,拋棄它們灰伟,這樣在大項(xiàng)目中可以顯著減少文件的體積。

ES6幫我們實(shí)現(xiàn)了儒旬!

不過(guò)栏账,目前無(wú)論是webpack還是browserify都還不支持這一功能...

如果你現(xiàn)在就想實(shí)現(xiàn)這一功能的話(huà),可以嘗試使用rollup.js

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末栈源,一起剝皮案震驚了整個(gè)濱河市挡爵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌甚垦,老刑警劉巖茶鹃,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涣雕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡闭翩,警方通過(guò)查閱死者的電腦和手機(jī)挣郭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)疗韵,“玉大人兑障,你說(shuō)我怎么就攤上這事×姘簦” “怎么了旺垒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)肤无。 經(jīng)常有香客問(wèn)我先蒋,道長(zhǎng),這世上最難降的妖魔是什么宛渐? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任竞漾,我火速辦了婚禮,結(jié)果婚禮上窥翩,老公的妹妹穿的比我還像新娘业岁。我一直安慰自己,他們只是感情好寇蚊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布笔时。 她就那樣靜靜地躺著,像睡著了一般仗岸。 火紅的嫁衣襯著肌膚如雪允耿。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,698評(píng)論 1 305
  • 那天扒怖,我揣著相機(jī)與錄音较锡,去河邊找鬼。 笑死盗痒,一個(gè)胖子當(dāng)著我的面吹牛蚂蕴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播俯邓,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼骡楼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了看成?” 一聲冷哼從身側(cè)響起君编,我...
    開(kāi)封第一講書(shū)人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎川慌,沒(méi)想到半個(gè)月后吃嘿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梦重,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年兑燥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琴拧。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡降瞳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蚓胸,到底是詐尸還是另有隱情挣饥,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布沛膳,位于F島的核電站扔枫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏锹安。R本人自食惡果不足惜短荐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叹哭。 院中可真熱鬧忍宋,春花似錦、人聲如沸风罩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)超升。三九已至入宦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間廓俭,已是汗流浹背云石。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留研乒,地道東北人汹忠。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像雹熬,于是被迫代替她去往敵國(guó)和親宽菜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • ECMAScript 6(以下簡(jiǎn)稱(chēng)ES6)是JavaScript語(yǔ)言的下一代標(biāo)準(zhǔn)竿报。因?yàn)楫?dāng)前版本的ES6是在2015...
    陳大沖閱讀 785評(píng)論 0 0
  • 引用:http://hao.jser.com/archive/10813/?utm_source=tuicool&...
    莊志平閱讀 1,214評(píng)論 1 14
  • ECMAScript 6(以下簡(jiǎn)稱(chēng)ES6)是JavaScript語(yǔ)言的下一代標(biāo)準(zhǔn)铅乡。因?yàn)楫?dāng)前版本的ES6是在2015...
    何wife閱讀 379評(píng)論 0 0
  • import export 這兩個(gè)家伙對(duì)應(yīng)的就是es6自己的module功能。 我們之前寫(xiě)的Javascript一...
    源大俠閱讀 406評(píng)論 0 0
  • ECMAScript6(以下簡(jiǎn)稱(chēng)ES6)是JavScript語(yǔ)言的下一代標(biāo)準(zhǔn)烈菌。因?yàn)楫?dāng)前版本的ES6是在2015年發(fā)...
    imtns閱讀 485評(píng)論 0 0