ES6特性之模塊【Modules】
阿新 • • 發佈:2018-04-13
不能 有一個 clas ont export requirejs 外部 方式 簡單
ES6之前已經出現了js模塊加載的方案,最主要的是CommonJS和AMD規範。commonjs主要應用於服務器,實現同步加載,如nodejs。AMD規範應用於瀏覽器,如requirejs,為異步加載。同時還有CMD規範,為同步加載方案如seaJS。
ES6在語言規格的層面上,實現了模塊功能,而且實現得相當簡單,完全可以取代現有的CommonJS和AMD規範,成為瀏覽器和服務器通用的模塊解決方案。
在ECMAScript 6中,modules 是存儲在文件中,一般而言是一個文件一個模塊。
ES6模塊主要有兩個功能:export和import
export用於對外輸出本模塊(一個文件可以理解為一個模塊)變量的接口
import用於在一個模塊中加載另一個含有export接口的模塊。
也就是說使用export
命令定義了模塊的對外接口以後,其他JS文件就可以通過import
命令加載這個模塊(文件)。如下圖(假設a和b文件在同一目錄下)
//a.js var sex=‘female‘; var f=function(value){ console.log(value); } export{sex,f}; //通過向大括號中添加sex,echo變量並且export輸出,就可以將對應變量值以sex、echo變量標識符形式暴露給其他文件而被讀取到 //不能寫成export sex這樣的方式,如果這樣就相當於export "female",外部文件就獲取不到該文件的內部變量sex的值,因為沒有對外輸出變量接口,只是輸出的字符串。
// b.js //通過import獲取a.js文件的內部變量,{}括號內的變量來自於a.js文件export出的變量標識符。 import {sex,f} from "./a.js" console.log(sex) //female f(sex) // female
也可以引入整個模塊:
// b.js import * as a.js from "./a.js" console.log(sex) //female f(sex) // female
a.js文件也可以按如下export語法寫,但不夠直觀,不推薦。
// a.js export var sex="female"; exportvar f=function(value){ console.log(value) } //因為function f(){}等價於 var f=function(){}所以也可以寫成 export function f(value){ console.log(value) }
以上是export與module的基本用法,再進行拓展學習
前面的例子可以看出,b.js使用import
命令的時候,用戶需要知道a.js所暴露出的變量標識符,否則無法加載。可以使用export default
命令,為模塊指定默認輸出,這樣就不需要知道所要加載模塊的變量名。
//a.js var sex="female"; export default sex; //(sex不能加大括號) //原本直接export sex外部是無法識別的,加上default就可以了.但是一個文件內最多只能有一個export default。 //其實此處相當於為sex變量值"female"起了一個系統默認的變量名default,自然default只能有一個值,所以一個文件內不能有多個export default。
// b.js //本質上,a.js文件的export default輸出一個叫做default的變量,然後系統允許你為它取任意名字。所以可以為import的模塊起任何變量名,且不需要用大括號包含 import any from "./a.js" import any12 from "./a.js" console.log(any,any12) // female,female
ES6特性之模塊【Modules】