摘要:如果要使其生效的話,在不使用第三方庫的情況下,只能將兩個(gè)文件同時(shí)引入這樣做的話,我們將無法看到彼此間的關(guān)聯(lián)加載因此,提供了解決方案,即模塊。這里簡(jiǎn)單的舉兩個(gè)。
類與模塊 類
es6 之前,通常使用構(gòu)造函數(shù)來創(chuàng)建對(duì)象
// 構(gòu)造函數(shù) User function User(username, email) { this.username = username; this.email = email; } // 為了讓實(shí)例共享方法,將其添加到原型上 User.prototype.changeEmail = function(newEmail) { this.email = newEmail; } // 使用 let user = new User("zen", "ihuangmx@qq.com") user.changeEmail("change@qq.com"); console.log(user.email); //=> "change@qq.com"
而 es6 則可以寫成
class User { // 實(shí)例化時(shí),調(diào)用 constructor 方法,默認(rèn)返回 this constructor(username, email) { this.username = username; this.email = email; } // 類的所有方法會(huì)自動(dòng)綁定到原型對(duì)象上,包括 constructor changeEmail(newEmail) { this.email = newEmail; } } // 使用 let user = new User("zen", "ihuangmx@qq.com") user.changeEmail("change@qq.com"); console.log(user.email); //=> "change@qq.com"
類中可以定義靜態(tài)方法,也可以使用 get 與 set 進(jìn)行訪問控制:
class User { constructor(username, email) { this.username = username; this.email = email; } changeEmail(newEmail) { this.email = newEmail; } static register(...args) { return new User(...args); } // 等價(jià) // static register(username, email) { // return new User(username, email); // } get info() { return this.username + " " + this.email; } // 首字符大寫 set name(name) { this.username = name.slice(0,1).toUpperCase().concat(name.slice(1)); } } // 使用 let user = User.register("zen", "ihuangmx@qq.com") console.log(user.info) // zen ihuangmx@qq.com user.name = "jack" console.log(user.info) // Jack ihuangmx@qq.com
類可以作為參數(shù)進(jìn)行傳遞:
function log(strategy) { strategy.handle(); } class ConsoleLogger { handle() { console.log("log log log"); } } log(new ConsoleLogger); //=> log log log模塊
在 TaskCollection.js 中定義一個(gè)類
class TaskCollection { constructor(tasks = []) { this.tasks = tasks; } dump() { console.log(this.tasks); } }
在 main.js 中使用該類
const tc = new TaskCollection([ "shop", "eat", "sleep" ]); tc.dump();
index.html - 顯示頁面。如果要使其生效的話,在不使用第三方庫的情況下,只能將兩個(gè)文件同時(shí)引入
Document
這樣做的話,我們將無法看到彼此間的關(guān)聯(lián)(main.js 加載 TaskCollection.js),因此,es6 提供了解決方案,即模塊。通過 export 和 import 來實(shí)現(xiàn)
TaskCollection.js - 使用 export 命令顯式指定輸出的代碼
// 輸出類 export class TaskCollection { constructor(tasks = []) { this.tasks = tasks; } dump() { console.log(this.tasks); } } // 輸出函數(shù) export function foo(){ console.log("foo"); } // 輸出變量 export let bar = 123; // 可以統(tǒng)一輸出,使其一目了然 // export {TaskCollection, foo, bar};
main.js - 使用 import 加載模塊
import { TaskCollection, foo, bar as bar1 } from "./TaskCollection"; const tc = new TaskCollection([ "shop", "eat", "sleep" ]); tc.dump(); foo(); console.log(bar1);
index.html - 只需要引用 main.js
Document
由于當(dāng)前的瀏覽器還不支持 es6 語法,我們可以使用打包工具。這里簡(jiǎn)單的舉兩個(gè)。
rollup.js全局安裝
$ cnpm install --global rollup
使用
$ rollup main.js --format iife --output bundle.js # 針對(duì)客戶端指定格式為 iife
然后只需要引用生成的 bundle.js
index.html
webpackDocument
安裝
$ cnpm install -g webpack
打包
$ webpack main.js bundle.js
或者在當(dāng)前項(xiàng)目下使用
$ cd webpack-demo-2 $ cnpm install webpack --save-dev
建立配置文件并設(shè)置
/webpack-demo-2/webpack.config.js var webpack = require("webpack"); module.exports = { entry: "./main.js", output: { filename: "./dist/main.js" } }
打包
$ webpack
通常是將其加入到 package.json 中
webpack-demo-2/package.json { "devDependencies": { "webpack": "^2.5.1" }, "scripts": { "build": "webpack" } }
現(xiàn)在,只需要運(yùn)行
$ cnpm run build轉(zhuǎn)換 js
可以注意到,rollup 和 webpack 都僅僅是將其打包,并沒有轉(zhuǎn)化為兼容的 js。
// 部分打包后的代碼 // dist/main.js "use strict"; /* harmony export (immutable) */ __webpack_exports__["b"] = foo; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return bar; }); // export 命令顯式指定輸出的代碼 // 輸出類 class TaskCollection { constructor(tasks = []) { this.tasks = tasks; } dump() { console.log(this.tasks); } }
這里以 webpack 為例,講解如何轉(zhuǎn)化為兼容的 js,首先安裝相關(guān)工具
$ cnpm install --save-dev buble-loader buble
添加
/webpack-demo-2/webpack.config.js var webpack = require("webpack"); module.exports = { entry: "./main.js", output: { filename: "./dist/main.js" }, module: { loaders: [ { test: /.js$/, loaders: "buble-loader" } ] } }
執(zhí)行
$ cnpm run build
現(xiàn)在,可以發(fā)現(xiàn)已經(jīng)轉(zhuǎn)化為兼容的 js 了
"use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TaskCollection; }); /* harmony export (immutable) */ __webpack_exports__["b"] = foo; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return bar; }); // export 命令顯式指定輸出的代碼 // 輸出類 var TaskCollection = function TaskCollection(tasks) { if ( tasks === void 0 ) tasks = []; this.tasks = tasks; }; TaskCollection.prototype.dump = function dump () { console.log(this.tasks); };
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/83306.html
摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...
摘要:希望幫助更多的前端愛好者學(xué)習(xí)。前端開發(fā)者指南作者科迪林黎,由前端大師傾情贊助。翻譯最佳實(shí)踐譯者張捷滬江前端開發(fā)工程師當(dāng)你問起有關(guān)與時(shí),老司機(jī)們首先就會(huì)告訴你其實(shí)是個(gè)沒有網(wǎng)絡(luò)請(qǐng)求功能的庫。 前端基礎(chǔ)面試題(JS部分) 前端基礎(chǔ)面試題(JS部分) 學(xué)習(xí) React.js 比你想象的要簡(jiǎn)單 原文地址:Learning React.js is easier than you think 原文作...
摘要:前言月份開始出沒社區(qū),現(xiàn)在差不多月了,按照工作的說法,就是差不多過了三個(gè)月的試用期,準(zhǔn)備轉(zhuǎn)正了一般來說,差不多到了轉(zhuǎn)正的時(shí)候,會(huì)進(jìn)行總結(jié)或者分享會(huì)議那么今天我就把看過的一些學(xué)習(xí)資源主要是博客,博文推薦分享給大家。 1.前言 6月份開始出沒社區(qū),現(xiàn)在差不多9月了,按照工作的說法,就是差不多過了三個(gè)月的試用期,準(zhǔn)備轉(zhuǎn)正了!一般來說,差不多到了轉(zhuǎn)正的時(shí)候,會(huì)進(jìn)行總結(jié)或者分享會(huì)議!那么今天我就...
摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個(gè)最重要的技術(shù)點(diǎn)常用整理網(wǎng)頁性能管理詳解離線緩存簡(jiǎn)介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實(shí)現(xiàn)的大排序算法一怪對(duì)象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個(gè)最重要的技術(shù)點(diǎn) 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...
閱讀 1309·2021-11-04 16:09
閱讀 3509·2021-10-19 11:45
閱讀 2404·2021-10-11 10:59
閱讀 1019·2021-09-23 11:21
閱讀 2770·2021-09-22 10:54
閱讀 1146·2019-08-30 15:53
閱讀 2612·2019-08-30 15:53
閱讀 3484·2019-08-30 12:57