ES6之-----------------Class的基本使用
阿新 • • 發佈:2019-01-28
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
加了私有屬性。方法是在屬性名之前,使用#
表示。