原型-類 應用程式語言
阿新 • • 發佈:2021-12-14
-
面向物件系統
執行環境==閉包鏈:靜態語法被稱為作用域或域;在動態環境中它們被稱為上下文
-
物件屬性的存取結果總是不確定的。
屬性不是自有的,那麼它的值就是原型決定的;例項x.constructor由aFunction.prototype.construtcotr決定
屬性是存取方法的,那麼它的值就是求值決定的。 -
1 in 1..constructor
“1..constructor”表示的就是該浮點數字面量的“.constructor”屬性。
JavaScript會自動將“值型別的資料”封裝成對應包裝型別的“物件”。
檢查物件“constructor”是否有屬性名“1” -
構造器new X() (==類)
-
類只能用 new 運算來建立,而不能使用“()”來做函式呼叫。
-
如果類宣告中通過 extends 指定了父類,
使用類宣告來建立物件時,物件是由父類或祖先類來建立例項,並使用this引用傳遞到當前類- 必須在構造器方法constructor()中顯式地使用super()來呼叫父類的構造過程,
在退出super()時把this“抄寫”給當前環境 - 在上述呼叫結束之前,是不能使用this引用的。(沒有被創建出)
- 必須在構造器方法constructor()中顯式地使用super()來呼叫父類的構造過程,
-
在類的構造方法和一般構造器中返回值,是可以影響 new 運算的結果的,但會確保 new 運算得到一個物件值。
-
設計原則:用原型來實現繼承,並在類(構造器)中處理子級的抽象差異
-
//這裡用於處理“不同的東西”
function CarEx(color){this.color=color;...}
//這裡用於從父類繼承“相同的東西”
CarEx.prototype=new Car("Eagle","TalonTSi",1993); //建立物件myCar=new CarEx("red")
//建立物件
myCar=new CarEx("red")
- super
語義是“呼叫父類構造方法” - 用於使用 被覆蓋的父類同名方法
- super指向父類
super 這個關鍵字的核心,在於為每一個方法新增一個“它所屬的類HomeObject”
只能在方法中使用 super,因為只有方法有 [[HomeObject]]。
通過當前方法的 [[HomeObject]]原型鏈來查詢父類同名方法 - super.xxx()
對super.xxx 這個super引用作“函式呼叫操作,呼叫中傳入的this引用是在當前環境上下文中查詢的。