1. 程式人生 > 其它 >原型-類 應用程式語言

原型-類 應用程式語言

  • 面向物件系統

    執行環境==閉包鏈:靜態語法被稱為作用域或域;在動態環境中它們被稱為上下文

  • 物件屬性的存取結果總是不確定的。
    屬性不是自有的,那麼它的值就是原型決定的;例項x.constructor由aFunction.prototype.construtcotr決定
    屬性是存取方法的,那麼它的值就是求值決定的。

  • 1 in 1..constructor
    “1..constructor”表示的就是該浮點數字面量的“.constructor”屬性。
    JavaScript會自動將“值型別的資料”封裝成對應包裝型別的“物件”。
    檢查物件“constructor”是否有屬性名“1”

  • 構造器new X() (==類)

    • 類只能用 new 運算來建立,而不能使用“()”來做函式呼叫。

    • 如果類宣告中通過 extends 指定了父類,
      使用類宣告來建立物件時,物件是由父類或祖先類來建立例項,並使用this引用傳遞到當前類

      1. 必須在構造器方法constructor()中顯式地使用super()來呼叫父類的構造過程,
        在退出super()時把this“抄寫”給當前環境
      2. 在上述呼叫結束之前,是不能使用this引用的。(沒有被創建出)
    • 在類的構造方法和一般構造器中返回值,是可以影響 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引用是在當前環境上下文中查詢的。