ES6中class類繼承的實現

2021-10-09 11:51:58 字數 1469 閱讀 9917

**

大多數瀏覽器的 es5 實現之中,每乙個物件都有__proto__屬性,指向對應的建構函式的prototype屬性。class 作為建構函式的語法糖,同時有prototype屬性和__proto__屬性,因此同時存在兩條繼承鏈。

(1)子類的__proto__屬性,表示建構函式的繼承,總是指向父類。

(2)子類prototype屬性的__proto__屬性,表示方法的繼承,總是指向父類的prototype屬性。

class

aclass

bextendsab

.__proto__ ===

a// true

b.prototype.__proto__ ===

a.prototype // true

上面**中,子類b的__proto__屬性指向父類a,子類b的prototype屬性的__proto__屬性指向父類a的prototype屬性。

這樣的結果是因為,類的繼承是按照下面的模式實現的。

class

aclass

b// b 的例項繼承 a 的例項

object.

setprototypeof(b

.prototype,

a.prototype)

;// b 繼承 a 的靜態屬性

object.

setprototypeof(b

,a);

const b =

newb()

;

《物件的擴充套件》一章給出過object.setprototypeof方法的實現。

object.

setprototypeof

=function

(obj, proto)

因此,就得到了上面的結果。

object.

setprototypeof(b

.prototype,

a.prototype)

;// 等同於

b.prototype.__proto__ =

a.prototype;

object.

setprototypeof(b

,a);

// 等同於

b.__proto__ =

a;

這兩條繼承鏈,可以這樣理解:作為乙個物件,子類(b)的原型(__proto__屬性)是父類(a);作為乙個建構函式,子類(b)的原型物件(prototype屬性)是父類的原型物件(prototype屬性)的例項。

b

.prototype = object.

create(a

.prototype)

;// 等同於

b.prototype.__proto__ =

a.prototype;

ES6中的類(class)和繼承

語法形式 class person showname showage let p1 new person yang 18 console.log p1.showname p1.showage 也可以寫成 const person class class裡面取值函式 getter class裡面設定函...

ES6入門 Class 的繼承

es6 提供了更接近傳統語言的寫法,引入了 class 類 這個概念,作為物件的模板。通過class關鍵字,可以定義類。基本上,es6 的class可以看作只是乙個語法糖,它的絕大部分功能,es5 都可以做到,新的class寫法只是讓物件原型的寫法更加清晰 更像物件導向程式設計的語法而已。傳統物件導...

ES6的class和繼承

二.class 的繼承 function myfun x,y myfun.prototype.function var a newmyfun 1 2 class myfun 類的內部所有定義的方法,都是不可列舉的 object.keys myfun.prototype 1.所有的類都有乙個const...