一、基礎用法 2. 3.枚舉 類的內部所有定義的方法,都是不可枚舉的(non-enumerable)。跟es5中的差距。 4.constructor 方法 constructor方法是類的預設方法,通過new命令生成對象實例時,自動調用該方法。一個類必須有constructor方法,如果沒有顯式定義 ...
一、基礎用法
//1傳統面向對象 構造函數 function Person(name,age){ this.name = name; this.age = age; } Person.prototype.sayName = function(){ console.log(this.name); //王大廚 } var person = new Person('王大廚','26'); person.sayName();
2.
//2.es6 中定義的類 class Person{ constructor(name,age){ this.name = name; this.age = age; } sayName(){ console.log(this.name) //王二廚 } } var person = new Person('王二廚',22); person.sayName(); //在ES6的“類”上面繼續存在。事實上,類的所有方法都定義在類的prototype屬性上面。
3.枚舉
類的內部所有定義的方法,都是不可枚舉的(non-enumerable)。跟es5中的差距。
4.constructor 方法
constructor
方法是類的預設方法,通過new
命令生成對象實例時,自動調用該方法。一個類必須有constructor
方法,如果沒有顯式定義,一個空的constructor
方法會被預設添加。
預設返回this,及實列對象。返回可以指定返回另外的對象。
類的構造函數,不使用new
是沒法調用的,會報錯。這是它跟普通構造函數的一個主要區別,後者不用new
也可以執行。
5.類的實列對象
生成類的實例對象的寫法,與ES5完全一樣,也是使用new
命令。如果忘記加上new
,像函數那樣調用Class
,將會報錯。
var person = new Person('王二廚',22); //正確 var p1 = Person(); //報錯
與ES5一樣,實例的屬性除非顯式定義在其本身(即定義在this
對象上),否則都是定義在原型上(即定義在class
上)。
6.不存在變數的提升
//Class不存在變數提升(hoist),這一點與ES5完全不同。 new Person(); //報錯 class Person{}
7.立即執行的Class 類
let p = new class{ constructor(name){ this.name = name; } sayName(){ console.log(this.name); } }('王三廚');
二、繼承
Class之間可以通過extends
關鍵字實現繼承,這比ES5的通過修改原型鏈實現繼承,要清晰和方便很多。(跟php中一樣啊