1. 程式人生 > >ES6之-----------------Class的基本使用

ES6之-----------------Class的基本使用

JavaScript 語言中,生成例項物件的傳統方法是通過建構函式,跟傳統的面嚮物件語言(比如 C++ 和 Java)差異很大;ES6 提供了更接近傳統語言的寫法,引入了 Class(類)這個概念,作為物件的模板。通過class關鍵字,可以定義類。

類的資料型別就是函式,類本身就指向建構函式。

1.類的定義

//定義類

class Point {

  constructor(x, y) {

    this.x = x;

    this.y = y;

  }

  toString() {

    return '(' + this.x + ', ' + this.y + ')';

  }

}


上面程式碼定義了一個“類”,可以看到裡面有一個constructor方法,這就是構造方法,而this關鍵字則代表例項物件。

Point類除了構造方法,還定義了一個toString方法。注意,定義的方法的時候,前面不需要加上function這個關鍵字,直接把函式定義放進去了就可以了。另外,方法之間不需要逗號分隔,加了會報錯。

另外,類的內部所有定義的方法,都是不可列舉的(non-enumerable)。

2.嚴格模式

類和模組的內部,預設就是嚴格模式,所以不需要使用use strict指定執行模式。只要你的程式碼寫在類或模組之中,就只有嚴格模式可用。

3.constructor 方法-----必須的

constructor方法是類的預設方法,通過new命令生成物件例項時,自動呼叫該方法。一個類必須有constructor方法, 如果沒有顯式定義,一個空的constructor方法會被預設新增。
constructor方法預設返回例項物件(即this),完全可以指定返回另外一個物件。
class Foo {
  constructor() {
    return Object.create(null);
  }
}


new Foo() instanceof Foo
// false
上面程式碼中,constructor函式返回一個全新的物件,結果導致例項物件不是Foo類的例項。

4.不存在變數提升

類不存在變數提升---------類使用在前,定義在後,這樣會報錯,因為 ES6 不會把類的宣告提升到程式碼頭部。 這種規定的原因與繼承有關,必須保證子類在父類之後定義。

5.私有方法和私有屬性

私有方法是常見需求,但 ES6 不提供,只能通過變通方法模擬實現。
與私有方法一樣,ES6 不支援私有屬性。目前,有一個提案,為class加了私有屬性。方法是在屬性名之前,使用#表示。