摘要:如果要使其生效的話,在不使用第三方庫的情況下,只能將兩個文件同時引入這樣做的話,我們將無法看到彼此間的關(guān)聯(lián)加載因此,提供了解決方案,即模塊。這里簡單的舉兩個。
類與模塊 類
es6 之前,通常使用構(gòu)造函數(shù)來創(chuàng)建對象
// 構(gòu)造函數(shù) User function User(username, email) { this.username = username; this.email = email; } // 為了讓實例共享方法,將其添加到原型上 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 { // 實例化時,調(diào)用 constructor 方法,默認返回 this constructor(username, email) { this.username = username; this.email = email; } // 類的所有方法會自動綁定到原型對象上,包括 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 進行訪問控制:
class User { constructor(username, email) { this.username = username; this.email = email; } changeEmail(newEmail) { this.email = newEmail; } static register(...args) { return new User(...args); } // 等價 // 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ù)進行傳遞:
function log(strategy) { strategy.handle(); } class ConsoleLogger { handle() { console.log("log log log"); } } log(new ConsoleLogger); //=> log log log模塊
在 TaskCollection.js 中定義一個類
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 - 顯示頁面。如果要使其生效的話,在不使用第三方庫的情況下,只能將兩個文件同時引入
Document
這樣做的話,我們將無法看到彼此間的關(guān)聯(lián)(main.js 加載 TaskCollection.js),因此,es6 提供了解決方案,即模塊。通過 export 和 import 來實現(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
由于當前的瀏覽器還不支持 es6 語法,我們可以使用打包工具。這里簡單的舉兩個。
rollup.js全局安裝
$ cnpm install --global rollup
使用
$ rollup main.js --format iife --output bundle.js # 針對客戶端指定格式為 iife
然后只需要引用生成的 bundle.js
index.html
webpackDocument
安裝
$ cnpm install -g webpack
打包
$ webpack main.js bundle.js
或者在當前項目下使用
$ 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)在,只需要運行
$ 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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/83306.html
摘要:特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 本以為自己收藏的站點多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會及時更新,平時業(yè)務(wù)工作時也會不定期更...
摘要:希望幫助更多的前端愛好者學習。前端開發(fā)者指南作者科迪林黎,由前端大師傾情贊助。翻譯最佳實踐譯者張捷滬江前端開發(fā)工程師當你問起有關(guān)與時,老司機們首先就會告訴你其實是個沒有網(wǎng)絡(luò)請求功能的庫。 前端基礎(chǔ)面試題(JS部分) 前端基礎(chǔ)面試題(JS部分) 學習 React.js 比你想象的要簡單 原文地址:Learning React.js is easier than you think 原文作...
摘要:前言月份開始出沒社區(qū),現(xiàn)在差不多月了,按照工作的說法,就是差不多過了三個月的試用期,準備轉(zhuǎn)正了一般來說,差不多到了轉(zhuǎn)正的時候,會進行總結(jié)或者分享會議那么今天我就把看過的一些學習資源主要是博客,博文推薦分享給大家。 1.前言 6月份開始出沒社區(qū),現(xiàn)在差不多9月了,按照工作的說法,就是差不多過了三個月的試用期,準備轉(zhuǎn)正了!一般來說,差不多到了轉(zhuǎn)正的時候,會進行總結(jié)或者分享會議!那么今天我就...
摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個最重要的技術(shù)點常用整理網(wǎng)頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實現(xiàn)的大排序算法一怪對象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個最重要的技術(shù)點 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...
閱讀 1370·2021-11-04 16:09
閱讀 3606·2021-10-19 11:45
閱讀 2472·2021-10-11 10:59
閱讀 1072·2021-09-23 11:21
閱讀 2838·2021-09-22 10:54
閱讀 1216·2019-08-30 15:53
閱讀 2674·2019-08-30 15:53
閱讀 3536·2019-08-30 12:57