1. 程式人生 > >深入淺出ES6---第二篇

深入淺出ES6---第二篇

arrow function箭頭函式

函式的快捷寫法,不需要通過 function 關鍵字建立函式,並且還可以省略 return 關鍵字。=> 是function的簡寫形式,支援expression 和 statement 兩種形式。

// 箭頭函式根據parma個數的不同,寫法上還可以做如下改變

() => { expression } // 零個引數用 () 表示
x => { expression } // 一個引數可以省略 ()
(x, y) => { expression } // 多引數不能省略 ()

例子:

var person = {
    name: 'tom'
, getName: function() { return this.name; } } // ES6 const person = { name: 'tom', getName: () => this.name }

當我們使用箭頭函式時,函式體內的this物件,就是定義時所在的物件,而不是使用時所在的物件。並不是因為箭頭函式內部有繫結this的機制,實際原因是箭頭函式根本沒有自己的this,它的this是繼承外面的,因此內部的this就是外層程式碼塊的this.

var person = {
    name: 'tom',
    getName: function
getName() {
var _this = this; // 使用了我們在es5時常用的方式儲存this引用 return setTimeout(function () { return _this.name; }, 1000); } }; //ES6 const person = { name: 'tom', getName: function() { return setTimeout(() => this.name, 1000); } }

增強的物件字面量

物件字面量被增強了,寫法更加簡潔與靈活,同時在定義物件的時候能夠做的事情更多了。
(1)當屬性與值的變數同名時

const name = 'Jane';
const age = 20

// es6
const person = {
  name,
  age
}

// es5
var person = {
  name: name,
  age: age
};

(2)定義方法可以不用function關鍵字

// es6
const person = {
  name,
  age,
  getName() { // 只要不使用箭頭函式,this就還是我們熟悉的this
    return this.name
  }
}

// es5
var person = {
  name: name,
  age: age,
  getName: function getName() {
    return this.name;
  }
};

(3)在物件字面量中可以使用中括號作為屬性,表示屬性也能是一個變量了。

const name = 'Jane';
const age = 20

const person = {
  [name]: true,
  [age]: true
}

模組的 Import 和 Export

import 用於引入模組,export 用於匯出模組。

// 引入整個檔案
import dva from 'dva';

// 引入函式(可以是一個或多個)
import { connect } from 'dva';
import { Link, Route } from 'dva/router';

// 引入全部並作為 github 物件
import * as github from './services/github';

// 匯出預設
export default App;
// 部分匯出,複合寫法是 export { App } from './file';
  等價於import { App } from './file;export{App}

class、extend、super

這三個特性涉及了ES5中最令人頭疼的的幾個部分:原型、建構函式,繼承。
class
ES6提供了更接近傳統語言的寫法,引入了Class(類)這個概念。新的class寫法讓物件原型的寫法更加清晰、更像面向物件程式設計的語法.

// ES5
// 建構函式
function Person(name, age) {
  this.name = name;
  this.age = age;
}

// 原型方法
Person.prototype.getName = function() {
  return this.name;
}

// ES6
class Person {
  constructor(name, age) {  // 建構函式
    this.name = name;
    this.age = age;
  }

  getName() {  // 原型方法
    return this.name;
  }
}

上面程式碼首先用class定義了一個“類”,可以看到裡面有一個constructor方法,這就是構造方法,而this關鍵字則代表例項物件。
簡單地說,constructor內定義的方法和屬性是例項物件自己的,而constructor外定義的方法和屬性則是所有例項物件可以共享的。這個和ES5裡的建構函式是差不多的意思,相當於把方法定義在建構函式裡是私有的,而把方法定義到原型中,所有例項共享.
extend繼承

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  getName() {
    return this.name
  }
}

// Student類繼承Person類
class Student extends Person {
  constructor(name, age, gender, classes) {
    super(name, age);
    this.gender = gender;
    this.classes = classes;
  }

  getGender() {
    return this.gender;
  }
}

Class之間可以通過extends關鍵字實現繼承,這比ES5的通過修改原型鏈實現繼承,要清晰和方便很多。上面定義了一個Cat類,該類通過extends關鍵字,繼承了Animal類的所有屬性和方法。

super關鍵字,它指代父類的例項(即父類的this物件)。子類必須在constructor方法中呼叫super方法,否則新建例項時會報錯。這是因為子類沒有自己的this物件,而是繼承父類的this物件,然後可以對其進行加工。如果不呼叫super方法,子類就得不到this物件。
class、extend/super三者的綜合

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

let animal = new Animal()
animal.says('hello') //animal says hello

class Cat extends Animal {
    constructor(){
        super()
        this.type = 'cat'
    }
}

let cat = new Cat()
cat.says('hello') //cat says hello

相關推薦

深入淺出ES6---第二

arrow function箭頭函式 函式的快捷寫法,不需要通過 function 關鍵字建立函式,並且還可以省略 return 關鍵字。=> 是function的簡寫形式,支援expression 和 statement 兩種形式。 // 箭頭函

深入淺出ES6---第一

ECMAScript 6(以下簡稱ES6)是JavaScript語言的下一代標準。因為當前版本的ES6是在2015年釋出的,所以又稱ECMAScript 2015。雖然目前並不是所有瀏覽器都能相容ES6全部特性,但越來越多的程式設計師在實際專案當中已經開始使用E

深入淺出es6----物件

1、Object.is()用來比較兩個物件是否嚴格相等,相當於 ===不同之處只有兩個:一是+0不等於-0,二是NaN等於自身。+0 === -0  //trueNaN === NaN //falseObject.is(+0,-0)//falseObject.is(NaN,N

實例講解webpack的基本使用第二

文件的 分享 fig .com size 如何 try 基本 bpa 這一篇來講解一下如何設置webpack的配置文件webpack.config.js 我們新建一個webpack-demo的項目文件夾,然後安裝webpack 執行如下命令 在項目文件夾下,

關於註解Annotation第二

ace public not turn http 通過反射 cnblogs interface 這樣的 舉個例子來看一看註解定義類在語法樹中用哪些語法節點來表示以及如何組織的。 @Retention(RetentionPolicy.RUNTIME) // 註解會在cl

RabbitMQ第二:java簡單的實現RabbitMQ

ech pre cer wait clas comm amqp cti 一次 前言:在這裏我將用java來簡單的實現rabbitMQ。下面我們帶著下面問題來一步步的了解和學習rabbitMQ。 1:如果消費者連接中斷,這期間我們應該怎麽辦 2:如何做到負載均衡 3:如何有效

第二:使用Spark對MovieLens的特征進行提取

src 參考 創建過程 程序 單單 關於 font 我們 eve 前言 在對數據進行了初步探索後,想必讀者對MovieLens數據集有了感性認識。而在數據挖掘/推薦引擎運行前,往往需要對數據預處理。預處理的重要性不言而喻,甚至比數據挖掘/推薦系統本身還重要。

第二:數據可視化 - 基本API

數據挖掘 idt 示例 iyu 大小 blue .com sof 個性化 前言 數據可視化是數據挖掘非常重要的一個環節,它不單在查閱了解數據環節使用到,在整個數據挖掘的流程中都會使用到。 因為數據可視化不單可以形象地展示數據,讓你對數據有更好

Neo4j 第二:圖形數據庫

this 擁有 個數 bms 關系型 基本概念 dex pan unique 在深入學習圖形數據庫之前,首先理解屬性圖的基本概念。一個屬性圖是由頂點(Vertex),邊(Edge),標簽(Lable),關系類型和屬性(Property)組成的有向圖。頂點也稱作節點(Node

我的微信小程序第二

公眾平臺 說了 支付 痛苦 平臺 .html tps 初創企業 應該 在上一篇《我的微信小程序第一篇(入門)》中,很多人問我什麽是微信小程序,在這裏我要說一下這個是我的失誤啦,我默認大家都知道微信小程序,其實可能行內人士都知道小程序,好多非行內朋友可能平時不太關註這些,所謂

Shell第二:正則表達式和文本處理工具

chan 金字塔 文本 lar 乘法 res 每次 比較 而是 一 什麽是正則   正則就是用一些具有特殊含義的符號組合到一起(稱為正則表達式)來描述字符或者字符串的方法。或者說:正則就是用來描述一類事物的規則。 生活中處處都是正則: 比如我們描述:4條腿

【滲透課程】第二下-HTTP協議的請求與響應深度剖析

語記 空行 服務器端 oid 原因 str 負載 log 引用 【滲透課程】第二篇下-HTTP協議的請求與響應深度剖析 HTTP1.1目前支持以下7種請求方法: 常見的MIME類型如下: 第一個數字有五種可能的取值: 目錄 什麽是請求方法?什麽是請求頭?

【滲透課程】第二上-http請求協議的簡單描述

html 文章 ont tp服務器 交互 .exe 打開 路徑 什麽 HTTP協議剖析 什麽是HTTP協議?如何發起請求?我認為這樣講大家能夠理解: 瀏覽器訪問網站也是http請求的一個過程。當你打開瀏覽器,訪問一個URL (協議://服務器IP:端口/路徑/文件)的時候,

英漢翻譯 第二

bsp 文章 industry 整形 com 美容 cts man product 政府官員 a government official 贊成 approve 我不贊成整形手術 I don‘t approve of comsmetic surgery. 美容的 化

什麽是反向傳播(第二

圖片 ont epm 什麽是 put 回來 課程 之前 idea 作者韓小雨 類比幾個人站成一排,第一個人看一幅畫(輸入數據),描述給第二個人(隱層)……依此類推,到最後一個人(輸出)的時候,畫出來的畫肯定不能看了(誤差較大)。 反向傳播就是,把畫拿給最後一個人看(求取

Linux賬號管理之第二:對用戶組進行管理

mov 切換 屬於 tom blog 用戶組 第二篇 roo clas 1、查看用戶的有效組群     groups 用戶名 註意:查看出來的結果可能有多個;第一個為主組群,後面的都是副組群    2、添加和刪除組群     添加一個組:groupadd 組

Linux實戰第二:Centos6和Centos7密碼破解實戰

root恢復個人筆記分享(在線閱讀):http://note.youdao.com/noteshare?id=744d026219e72c69e606f115bd333ddcPDF版本下載請在附近中下載本文出自 “人才雞雞” 博客,請務必保留此出處http://6575793.blog.51cto.com/6

小學期心得第二

頁面 查詢 調試 小學 保存數據 錯誤 save ont 實現 第四第五第六天 在這幾天的學習裏,我還是出現了很多的問題,不過靠著同學和老師的幫助,都得以順利解決。 我們一起配置了一系列接口,實現類,xml,數據庫映射文件 要使用MYSQL就要先建好表格,在

硬件——nrf51822第二,如何設置keil用來下載程序

硬件 電子 keil .com logs alt .cn cnblogs image 轉自電子發燒友論壇 硬件——nrf51822第二篇,如何設置keil用來下載程序

python入門第二

indent 正序 space pla pac 列表 總結 form spa python 有切片和叠片的兩種操作 支持list 和tuple兩種數據類型 list: 第一種操作[0:1] :以第0個索引開始,到索引1 結束, [:] 什麽都沒有寫,則是從0開始。 第二