當衍生類別 (derived class) 繼承了基底類別 (base class) 的成員時,常常忘了要初始 (配置) 那些成員,亦即呼叫基底類別的建構函數。這是 OOP 初學者,也是 JavaScript programmer 在實作繼承關係時易犯的毛病。
當衍生類別 (derived class) 繼承了基底類別 (base class) 的成員時,常常忘了要初始 (配置) 那些成員,亦即呼叫基底類別的建構函數。這是 OOP 初學者,也是 JavaScript programmer 在實作繼承關係時易犯的毛病。
在「物件properties在繼承時出問題???」一文中,該作者反應的問題,其實是 OOP 初學者易犯的毛病。觀看該作者的 source code ,不難看出問題出在何處,用 C++ 的說法來解釋,就是作者在實作衍生類別時,忘了初始 (配置) 繼承自基底類別的成員。 JavaScript 並沒有類別繼承的概念,反而它是用一個已存在的 object 生成 (new) 一個新的 object ,個體成員是以類似 C++ 中的 copy constructor 方式建立的。因此,一個衍生個體 (derived object) 中屬於 Object Type ( See also: Standard ECMA-262 3rd Edition ch.8.6) 的成員,必定與基底個體 (base object) 參考同一份實體。如果衍生個體要擁有私有內容,則必須另行配置,亦即呼叫基底個體的建構函數。然而 JavaScript 本身並沒有提供一個便利的內建方法可用,需要自己寫。幸好這並不難。一個簡單有效的方法是,在建構子中,先配置一個暫時性的基底個體,然後將此暫時性個體的成員內容,一一指派給自己 (this) 的成員。因此,改寫「物件properties在繼承時出問題???」一文中的程式碼如下,即為該作者所要求的結果。