成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Vue 2.0 入門(mén)系列(15)學(xué)習(xí) Vue.js 需要掌握的 es6 (2)

vslam / 1668人閱讀

摘要:如果要使其生效的話,在不使用第三方庫(kù)的情況下,只能將兩個(gè)文件同時(shí)引入這樣做的話,我們將無(wú)法看到彼此間的關(guān)聯(lián)加載因此,提供了解決方案,即模塊。這里簡(jiǎn)單的舉兩個(gè)。

類與模塊

es6 之前,通常使用構(gòu)造函數(shù)來(lái)創(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", "[email protected]")
user.changeEmail("[email protected]");
console.log(user.email); //=> "[email protected]"

es6 則可以寫(xiě)成

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", "[email protected]")
user.changeEmail("[email protected]");
console.log(user.email); //=> "[email protected]"

類中可以定義靜態(tài)方法,也可以使用 getset 進(jìn)行訪問(wè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;
    }

    //  首字符大寫(xiě)
    set name(name) {
        this.username = name.slice(0,1).toUpperCase().concat(name.slice(1));
    }

    
}

// 使用
let user = User.register("zen", "[email protected]")
console.log(user.info)  // zen [email protected]
user.name = "jack" 
console.log(user.info)  // Jack [email protected]

類可以作為參數(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 - 顯示頁(yè)面。如果要使其生效的話,在不使用第三方庫(kù)的情況下,只能將兩個(gè)文件同時(shí)引入




    
    Document



    
    


這樣做的話,我們將無(wú)法看到彼此間的關(guān)聯(lián)(main.js 加載 TaskCollection.js),因此,es6 提供了解決方案,即模塊。通過(guò) exportimport 來(lái)實(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 語(yǔ)法,我們可以使用打包工具。這里簡(jiǎn)單的舉兩個(gè)。

rollup.js

全局安裝

$ cnpm install --global rollup

使用

$ rollup main.js --format iife --output bundle.js  # 針對(duì)客戶端指定格式為 iife

然后只需要引用生成的 bundle.js

index.html




    
    Document



    

webpack

安裝

$ 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

可以注意到,rollupwebpack 都僅僅是將其打包,并沒(méi)有轉(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://systransis.cn/yun/83306.html

相關(guān)文章

  • 前端資源系列(4)-前端學(xué)習(xí)資源分享&前端面試資源匯總

    摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒(méi)想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...

    princekin 評(píng)論0 收藏0
  • 前端相關(guān)大雜燴

    摘要:希望幫助更多的前端愛(ài)好者學(xué)習(xí)。前端開(kāi)發(fā)者指南作者科迪林黎,由前端大師傾情贊助。翻譯最佳實(shí)踐譯者張捷滬江前端開(kāi)發(fā)工程師當(dāng)你問(wèn)起有關(guān)與時(shí),老司機(jī)們首先就會(huì)告訴你其實(shí)是個(gè)沒(méi)有網(wǎng)絡(luò)請(qǐng)求功能的庫(kù)。 前端基礎(chǔ)面試題(JS部分) 前端基礎(chǔ)面試題(JS部分) 學(xué)習(xí) React.js 比你想象的要簡(jiǎn)單 原文地址:Learning React.js is easier than you think 原文作...

    fuyi501 評(píng)論0 收藏0
  • 個(gè)人分享--web前端學(xué)習(xí)資源分享

    摘要:前言月份開(kāi)始出沒(méi)社區(qū),現(xiàn)在差不多月了,按照工作的說(shuō)法,就是差不多過(guò)了三個(gè)月的試用期,準(zhǔn)備轉(zhuǎn)正了一般來(lái)說(shuō),差不多到了轉(zhuǎn)正的時(shí)候,會(huì)進(jìn)行總結(jié)或者分享會(huì)議那么今天我就把看過(guò)的一些學(xué)習(xí)資源主要是博客,博文推薦分享給大家。 1.前言 6月份開(kāi)始出沒(méi)社區(qū),現(xiàn)在差不多9月了,按照工作的說(shuō)法,就是差不多過(guò)了三個(gè)月的試用期,準(zhǔn)備轉(zhuǎn)正了!一般來(lái)說(shuō),差不多到了轉(zhuǎn)正的時(shí)候,會(huì)進(jìn)行總結(jié)或者分享會(huì)議!那么今天我就...

    sherlock221 評(píng)論0 收藏0
  • 前端文檔收集

    摘要:系列種優(yōu)化頁(yè)面加載速度的方法隨筆分類中個(gè)最重要的技術(shù)點(diǎn)常用整理網(wǎng)頁(yè)性能管理詳解離線緩存簡(jiǎn)介系列編寫(xiě)高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問(wèn)性能優(yōu)化方案實(shí)現(xiàn)的大排序算法一怪對(duì)象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁(yè)面加載速度的方法 隨筆分類 - HTML5 HTML5中40個(gè)最重要的技術(shù)點(diǎn) 常用meta整理 網(wǎng)頁(yè)性能管理詳解 HTML5 ...

    jsbintask 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<