1.Es6引入了Class 類這個概念,作為對象的模板,通過class 關鍵字,可以定義類。 2.類和模塊的內部,預設就是嚴格模式,所以不需要使用use strict 指定運行模式。 3.constructor 方法就是類的預設方法,通過new 命令生成對象實例時,自動調動該 方法,一個類必須有co ...
1.Es6引入了Class 類這個概念,作為對象的模板,通過class 關鍵字,可以定義類。 2.類和模塊的內部,預設就是嚴格模式,所以不需要使用use strict 指定運行模式。 3.constructor 方法就是類的預設方法,通過new 命令生成對象實例時,自動調動該 方法,一個類必須有constructor 方法,如果沒有顯示定義,一個空的constructor 方法會預設添加。 4.類的實例對象 必須使用new ,像函數那樣調用Class ,將會報錯。 例如: class Point { } // 報錯 var point = Point(2,3); // 正確 var point = new Point(2,3) 5.Class表達式 與函數一樣,類也可以使用表達式的形式定義。 const MyClass = class Me{ getClassName() { return Me.name; } }; 採用Class 表達式,可以寫出立即執行的Class let person = new clas { constructor(name){ this.name = name; } sayName() { console.log(this.name); } }('張三'); person.sayName(); //張三 6.類不存在變數提升。 7.不提供私有方法和私有屬性。 8.this 的指向 類德豐放內部含有this,它預設指向類的實例。 9.class 的靜態方法。在類中定義的方法,都會被實例繼承, 如果在一個方法前加上static 關鍵字,就表示該方法 不會被實例繼承,而是直接通過類來調用。 class Foo { static classMethod() { return 'hello'; } } Foo.classMethod() // 'hllo' var foo = new Foo(); foo.classMethod(); // 報錯 10.class 可以通過extends關鍵字實現繼承。 class Point {} class ColorPoint extends Point{} class ColorPoint extends Point { constructor(x,y.color){ super(x,y); // 調用父類的 constructor(x,y) this.color = color; } toString() { return this.color + ' '+ super.toString(); // 調用父類的方法 } } 子類必須在constructor 方法中調用super 方法,否則新建實例時會報錯,因為子類沒 有自己的 this 對象,而是繼承父類的this 對象,而活對其進行加工,如果不調用 super 方法,子類就的不到this 對象。 11.Object.getPrototypeOf() Object.getPrototypeOf(ColorPoint) == Point 可以使用這個方法判斷,一個類是否繼承另一個類。 12.super 關鍵字 super 這個關鍵字既可以當作函數使用,也可以當做對象使用。 1.super 作為函數調用的時,代表父類的構造函數。子類的構造函數必須 執行一次super函數。 class A {} class B extends A { constructor() { super(); } } 2.super 作為對象時,在普通方法中,指向父類的原型對象,在 靜態方法中指向父類。 class A { p() { return 2; } } class B extends A{ constructor() { super(); console.log(super.p()); // 2 } } 13.類的prototype 屬性和__proto__ 屬性 class 作為構造函數的語法糖,同時有prototype 屬性和__proto__屬性,因此 存在兩天繼承連。 1.子類的__proto__ 屬性,表示構造函數的繼承,總是指向父類。 2.子類的prototype 屬性的__proto__屬性,表示該方法的繼承,總是指向父類 的protoype屬性。 class A {} class B extends A {} B.__proto__===A // true B.proptoype.__proto__ === A.prototype // true 14.extends 的繼承目標 extends 關鍵字後面可以跟很多類型的值。 15.實例的__proto__屬性 子類屬性的__proto__屬性的__proto__屬性,指向父類實例的__proto__,也就是說 子類原型的原型,是父類的原型。 var p1 = new Point(2,3); var p2 = new ColorPoint(2,3,'red'); p2.__proto__===p1.__proto // false p2.__protot__.__proto__===p1.__proto__ // true