Nodejs與ES6系列4:ES6中的類

帥蟲哥發表於2016-06-19

ES6中的類

4.1、class基本語法

在之前的javascript語法中是不存在class這樣的概念,如果要通過建構函式生成一個新物件程式碼

function Shape(width,height){
  this.width = width;
  this.height = height;
}

Point.prototype.toString = function () {
  return '(' + this.width + ', ' + this.height + ')';
}

ES6提供了更接近傳統語言的寫法,引入了Class(類)這個概念,作為物件的模板。通過class關鍵字,可以定義類。基本上,ES6的class可以看作只是一個語法糖,它的絕大部分功能,ES5都可以做到,新的class寫法只是讓物件原型的寫法更加清晰、更像物件導向程式設計的語法而已。上面的程式碼用ES6的“類”改寫,就是下面這樣。

//定義類
class Shape {

  constructor(width, height) {
    this.height = height;
    this.width = width;
  }

  toString() {
    return '(' + this.width + ', ' + this.height + ')';
  }

}

通過class定義類名,constructor關鍵字定義建構函式。

4.2、繼承與多型

繼承與多型是物件導向最重要的兩個特性,通過繼承可以實現程式碼的重構,在之前的javascript中繼承需要通過原型鏈來實現,而在ES6中可以通過extends關鍵字直觀的實現繼承。首先定義基類Shape,定義子類Rect整合與基類並重寫方法toArea實現多型。

'use strict'
class Shape {
    constructor(width,height){
        this.width=width;
        this.height=height;
    }
    /***
     * 獲取面積
     * @returns {number}
     */
    toArea(){
        return this.width*this.height
    }
}
module.exports = Shape;
'use strict'
var Shape = require('./Shape');
class Rect extends Shape {
    constructor(width, height) {
        super(width, height);
    }
    toArea() {
        return this.width*this.height*2
    }
}
module .exports = Rect;

子類Rect整合與基類Shape,擁有了基類的方法toArea,和屬性width與height,而子類通過相同的方法名重寫了方法toArea。

var sharp = new Sharp(1,2);
var rect = new Rect(1,2);
console.log(sharp.toArea());
console.log(rect.toArea());
====
2
4

4.3、類的靜態方法

ES6中的類提供靜態方法,靜態方法只能在類成員下呼叫,如果類例項化後再呼叫會丟擲異常。同樣的基類定義的靜態方法能被子類所繼承。靜態方法通過static關鍵字定義。

'use strict'
class Shape {
    constructor(width,height){
        this.width=width;
        this.height=height;
    }
    /***
     * 獲取面積
     * @returns {number}
     */
    toArea(){
        return this.width*this.height
    }
    /**
     * 靜態方法
     * @returns {string}
     */
    static toName(){
        return 'shape'
    }
}
module.exports = Shape;
console.log(Rect.toName());
===
shape

值得注意的是在ES6的類中並沒有靜態屬性的概念。靜態屬性可以通過Shape.name這樣來定義。

相關文章