es6中的新特性

es6中最常用的當(dāng)屬箭頭函數(shù)

function(i){ return i + 1; } //ES5
(i) => i + 1 //ES6

如果返回的語句有多條可以使用大括號包裹

function(x, y) { 
    x++;
    y--;
    return x + y;
}
(x, y) => {x++; y--; return x+y}

除了上面的簡潔的寫法以外,es6對于this的指向問題也發(fā)生了變化,this指向的是他的上下文對象

class Animal {
    constructor(){
        this.type = 'animal'
    }
    says(say){
        setTimeout(function(){
            console.log(this.type + ' says ' + say)
        }, 1000)
    }
}

 var animal = new Animal()
 animal.says('hi')  //undefined says hi

由于定時器的調(diào)用,this的指向發(fā)生變換,(定時器的調(diào)用需要把里面的事件加載到異步執(zhí)行的序列當(dāng)中,當(dāng)執(zhí)行完代碼,this的質(zhì)就指向的是window,這里我們需要強制綁定一下this的指向,主要的方法有下面兩種)

1.第一種是將this傳值給self,再用self來代替this

says(say){
       var self = this;
       setTimeout(function(){
           console.log(self.type + ' says ' + say)
       }, 1000)

第二種使用bind(this)來綁定this的指向

   says(say){
       setTimeout(function(){
           console.log(this.type + ' says ' + say)
       }.bind(this), 1000)

現(xiàn)在我們可以使用箭頭函數(shù)而不用處理thisd指向問題

class Animal {
    constructor(){
        this.type = 'animal'
    }
    says(say){
        setTimeout( () => {
            console.log(this.type + ' says ' + say) //this的指向就是他的上下文對象就是實力話出來的animal對象
        }, 1000)
    }
}
 var animal = new Animal()
 animal.says('hi')  //animal says hi

當(dāng)我們使用箭頭函數(shù)時,函數(shù)體內(nèi)的this對象,就是定義時所在的對象,而不是使用時所在的對象。
并不是因為箭頭函數(shù)內(nèi)部有綁定this的機制,實際原因是箭頭函數(shù)根本沒有自己的this,它的this是繼承外面的,因此內(nèi)部的this就是外層代碼塊的this。

template string 模板字符串

這個東西也是非常有用,當(dāng)我們要插入大段的html內(nèi)容到文檔中時,傳統(tǒng)的寫法非常麻煩,所以之前我們通常會引用一些模板工具庫,比如mustache等等

傳統(tǒng)的寫法
$("#result").append(
 "There are <b>" + basket.count + "</b> " +
 "items in your basket, " +
 "<em>" + basket.onSale +
 "</em> are on sale!"
);

但是es6的新特性我們就可以這樣寫

$("#result").append(`
  There are <b>${basket.count}</b> items
   in your basket, <em>${basket.onSale}</em>
  are on sale!
`);

用反引號(\)來標(biāo)識起始,用${}`來引用變量,

destructuring

es6允許按照一定的模式,從數(shù)組和對象中提取值,對變量進(jìn)行賦值
最常用的是數(shù)組和對象的解構(gòu)

ea6中的模塊化

假設(shè)我們有兩個js文件: index.js和content.js,現(xiàn)在我們想要在index.js中使用content.js返回的結(jié)果,我們要怎么做呢?

//content.js
export default 'A cat'
//index.js
import animal from './content'
//index.js
import { say, type } from './content'  
let says = say()
console.log(`The ${type} says ${says}`)  //The dog says Hello

這里輸入的時候要注意:大括號里面的變量名,必須與被導(dǎo)入模塊(content.js)對外接口的名稱相同。

終極秘籍

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

 import { type } from './content'   

由于其他兩個變量沒有被使用,我們希望代碼打包的時候也忽略它們,拋棄它們,這樣在大項目中可以顯著減少文件的體積。

ES6幫我們實現(xiàn)了!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、ES6簡介 ? 歷時將近6年的時間來制定的新 ECMAScript 標(biāo)準(zhǔn) ECMAScript 6(亦稱 ...
    一歲一枯榮_閱讀 6,208評論 8 25
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持,譯者再次奉上一點點福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠,并抽取幸運大...
    HetfieldJoe閱讀 2,993評論 0 16
  • 函數(shù)參數(shù)的默認(rèn)值 基本用法 在ES6之前,不能直接為函數(shù)的參數(shù)指定默認(rèn)值,只能采用變通的方法。 上面代碼檢查函數(shù)l...
    呼呼哥閱讀 3,703評論 0 1
  • 一開始接觸Symbol的時候,以為這是在Javascript 中提供了一種Dictionary 的實現(xiàn)方式。 標(biāo)準(zhǔn)...
    richardch閱讀 366評論 0 0
  • 思路:活化-創(chuàng)造空間-肌肉激活-穩(wěn)定
    小豬文禾閱讀 587評論 0 0

友情鏈接更多精彩內(nèi)容