一、概述
js對面向對象的實作就是給函數一個原型對象(Prototype),兩者結合可以用來表達類。類的實質就是由兩個對象組合而成(函數是特殊的對象),它們通過prototype和constructor屬性互相引用。
二、類
ES6的class是構造函數的文法糖,本質上也是特殊的函數,constructor是部分構造器,真實的構造器還要加上class的屬性、靜态屬性、靜态方法,構造器的原型會添加class的方法
- 類的屬性和方法:略
- 類的繼承:由于類是由2個對象組合的,是以類的繼承實質就是2個對象的原型鍊連接配接(通過__proto__),再将2個duixa對象通過prototype和constructor屬性互相引用。表現出來就是類會有2條繼承鍊,一條是構造器作為對象的繼承鍊,一條是構造器的原型的繼承鍊。
- 類的執行個體:類通過構造器生成一個對象,該對象繼承構造器的原型。執行個體就是原型繼承鍊上的對象。
- 類的tips:關鍵字super指向yun原型鍊的上級,類有2條原型鍊,是以super在類中會有2中情況。繼承得到的類的構造器不能生成this對象,隻能通過super指向shag上級構造器對象。類中預設為嚴格模式。
三、總結
本沒有對象,取了Prototype後,new一下就有了。本沒有類,加了class文法糖後,就有了。若很想完整的體驗面向duixa對象程式設計,就使用TypeScript吧,否則就沒必要舍棄js的動态魅力。