ES6特性之:類

zarknight發表於2017-01-16

物件導向程式設計是一個很流行也很讓人容易理解的方法。物件導向程式設計中的一個核心概念就是類,我們可以把事物都抽象成一個個的類來描述他們的資訊和行為。

我們把JavaScript稱為基於物件的語言,而不是物件導向的語言,它是一個基於prototype的語言。它的語法中沒有像Java之類典型面嚮物件語言中定義一個類的語法,我們要建立一個對新的物件的描述,可能會這樣寫:

function Person(name, age) {
  this.name = name;
  this.age = age;

  this.walk = function () {
    console.log("I`m walking...");
  };
}

然後要根據這個物件描述建立一個新物件例項,就會這麼做:

var person = new Person(`kevin`, 18);

在ES6中,提供了一個更符合物件導向風格的類定義方式:使用class關鍵字,雖然它只是一個語法糖,但是好歹看起來和主流面向程式設計的語言更一致了。

上面的例子可以用class關鍵字改寫:

class Person {

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

  walk() {
    console.log("I`m walking...");
  }

}

靜態方法

提供了static關鍵字在類中定義靜態方法:

class Person {

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

  walk() {
    console.log("I`m walking...");
  }

  static create(name, age) {
    return new Person(name, age)
  }

}

繼承

可以使用extends關鍵字讓當前類繼承另一個類的屬性和方法:

// 父類:形狀
class Shape {
  
  constructor(name) {
    this.name = name;
  }

  draw() {
    console.log("drawing " + this.name);
  }

}

//子類:圓形
class Circle extends Shape {

  constructor() {
    super(`circle`); //呼叫父類的constructor
  }

}

//子類:方形
class Rect extends Shape {

  constructor() {
    super(`rect`);  //呼叫父類的constructor
  }

}

var circle = new Circle();
circle.draw(); //drawing circle

var rect = new Rect();
rect.draw();  //drawing rect


相關文章