ES6中類的其他書寫方式與繼承

2021-10-18 23:02:40 字數 2781 閱讀 8158

可計算的成員名

getter和setter

object.defineproperty 可定義某個物件成員屬性的讀取和設定

使用getter和setter控制的屬性,不在原型上

靜態成員

建構函式本身的成員

使用static關鍵字定義的成員即靜態成員

字段初始化器(es7)

注意:1). 使用static的字段初始化器,新增的是靜態成員

2). 沒有使用static的字段初始化器,新增的成員位於物件上

3). 箭頭函式在字段初始化器位置上,指向當前物件

類表示式

橫切關注點

裝飾器的本質是乙個函式

const printname =

"print"

;class

animal

//建立乙個age屬性,並給它加上getter,讀取該屬性時,會執行該函式

getage()

//建立乙個age屬性,並給它加上setter,給該屬性賦值時,會執行該函式

setage

(age)

if(age <0)

else

if(age >

1000

)this

._age = age;

}[printname]()

`); console.

log(

`【名字】:$`

);console.

log(

`【年齡】:$`

);}}

var a =

newanimal

("狗"

,"旺財",3

);console.

log(a)

如果兩個類a和b,如果可以描述為:b 是 a,則,a和b形成繼承關係

如果b是a,則:

b繼承自a

a派生b

b是a的子類

a是b的父類

如果a是b的父類,則b會自動擁有a中的所有例項成員。

新的關鍵字:

注意:es6要求,如果定義了constructor,並且該類是子類,則必須在constructor的第一行手動呼叫父類的建構函式

如果子類不寫constructor,則會有預設的構造器,該構造器需要的引數和父類一致,並且自動呼叫父類構造器

【冷知識】

正常情況下,this的指向,this始終指向具體的類的物件

class

animal

this

.type = type;

this

.name = name;

this

.age = age;

this

.*** = ***;

}print()

`); console.

log(

`【名字】:$`

);console.

log(

`【年齡】:$`

);console.

log(

`【性別】:$`

);}jiao()

}class

dogextends

animal

print()

`);}

//同名方法,會覆蓋父類

jiao()

}//下面的**邏輯有誤

const a =

newdog

("旺財",3

,"公")a.

print()

;

function

animal

(type, name, age, ***)

animal.prototype.

print

=function()

`); console.

log(

`【名字】:$`

);console.

log(

`【年齡】:$`

);console.

log(

`【性別】:$`

);}function

dog(name, age, ***)

object.

setprototypeof

(dog.prototype, animal.prototype)

;const d =

newdog

("旺財",3

,"公");

d.print()

;console.

log(d)

;

class

animal

print()

`); console.

log(

`【名字】:$`

);console.

log(

`【年齡】:$`

);console.

log(

`【性別】:$`

);}jiao()

}class

dogextends

animal

print()

`);}

//同名方法,會覆蓋父類

jiao()

}const d =

newdog

("旺財",3

,"公");

d.print()

;console.

log(d)

d.jiao()

;

es6 類的繼承

function animal name animal.prototype.drink function animal.prototype.eat function item function dog name,breed animal.prototype dog.prototype animal....

ES6 類的繼承

類的繼承 super 關鍵字 子類通過 extends 關鍵字來繼承父類的所有屬性和方法 子類必須在constructor中呼叫super方法,否則新建例項會報錯 es5的繼承中,實質是先創造子類的例項物件this,然後再將父類的方法 屬性新增到this上面。es6的繼承中,實質是先創造父類的例項物...

ES6類的繼承

es6 引入了關鍵字class來定義乙個類,constructor是構造方法,this代表例項物件。constructor相當於python的init而this則相當於self 類之間通過extends繼承,繼承父類的所有屬性和方法。super關鍵字,它代指父類的this物件,子類必須在constr...