class 基本語法
//class 實現(xiàn)
class Point {
constructor (x,y) {
this.x = x;
this.y = y;
}
toString() {
return (this.x,this.y)
}
}
//z構(gòu)造函數(shù)實現(xiàn)
function Points(x,y) {
this.x = x;
this.y = y;
}
Points.prototype.toString = function(){
return this.x+this.b
}
constructor
- 默認(rèn)方法返敬,未顯示定義時會默認(rèn)添加
- 默認(rèn)返回實例對象 this
- 必須使用 new 調(diào)用
- static 靜態(tài)方法
類相當(dāng)于實例的原型扎附,所有在類中定義的方法,都會被實例繼承。如果在一個方法前色洞,加上static關(guān)鍵字杨何,就表示該方法不會被實例繼承净赴,而是直接通過類來調(diào)用,這就稱為“靜態(tài)方法”驮捍。類相當(dāng)于實例的原型疟呐,所有在類中定義的方法,都會被實例繼承东且。如果在一個方法前启具,加上static關(guān)鍵字,就表示該方法不會被實例繼承珊泳,而是直接通過類來調(diào)用鲁冯,這就稱為“靜態(tài)方法”。
靜態(tài)方法可以被子類繼承色查。
class Foo {
static classMethod() {
return 'hello';
}
}
Foo.classMethod() // 'hello'
var foo = new Foo();
foo.classMethod()
// TypeError: foo.classMethod is not a function
繼承 extends
在子類的構(gòu)造函數(shù)中薯演,只有調(diào)用super之后,才可以使用this關(guān)鍵字秧了,否則會報錯跨扮。這是因為子類實例的構(gòu)建,是基于對父類實例加工示惊,只有super方法才能返回父類實例好港。
class Point {
}
class ColorPoint extends Point {
}
class ColorPoint extends Point {
constructor(x, y, color) {
super(x, y); // 調(diào)用父類的constructor(x, y)
this.color = color;
}
toString() {
return this.color + ' ' + super.toString(); // 調(diào)用父類的toString()
}
}
super
- 函數(shù) super()
作為函數(shù)使用,代表父類的構(gòu)造函數(shù)米罚;
子類的構(gòu)造函數(shù)必須執(zhí)行一次 super();
class A {
constructor() {
console.log(new.target.name);
}
}
class B extends A {
constructor() {
super();
}
}
new A() // A
new B() // B
super雖然代表了父類A的構(gòu)造函數(shù)钧汹,但是返回的是子類B的實例,即super內(nèi)部的this指的是B
- 對象 super
在普通方法中 指向父類的原型對象
在靜態(tài)方法中 指向 父類