es6 class

来源:http://www.cnblogs.com/nmxs/archive/2017/12/11/8022722.html
-Advertisement-
Play Games

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