第一、先說說作為前端對類和構造函數的理解:
(1)類 可以理解成一種特殊的數據類型。
(2)類 里面包含了構造函數,或者說構造函數是類里面的特殊方法。在new 實例的時候會自動調用 構造函數。
第二、new一個實例的過程分為兩步:
(1)第一步現在內存中開辟一塊空間
(2)第二步自動調用構造函數,會執行構造函數里面的代碼。
JavaScript是面向對象的語言,引用數據類型都是對象(也就是我們說的萬物皆對象),包括函數也是對象,同時還可以通過Object對象自定義對象。
但是,和其他面向對象語言(如 Java 等高級語言)比,也有很大差異,JS 中沒有類或接口的概念,即不能直接定義抽象的類,也不能直接實現繼承。不過,為了編程的方便,我們可以在 JS 中模擬類和繼承的行為。
創建對象實例或類(雖然沒有類的概念,但是可以把用於創建新對象的對象看作類),可以通過構造函數來實現,構造函數就是具有一系列屬性和行為作為函數體的函數,可以通過函數參數傳入值。它就相當於 Java 中類的構造函數,需要時可以通過 var instanceObj = new ConstructorFunc(para1,para2,...) 來創建對象(實例)。JS 的對象中還有一個重要概念,即原型。每個對象都有原型,原型也是一個對象,可以看做是構造函數的映像,是創建實例的模型。對象(類)的屬性 prototype 即是對原型對象的引用,創建實例后,也有屬性 __proto__ 指向原型對象,但該屬性是隱含的。由於不斷創造新對象(實例),一級一級的傳遞原型對象,即可構成原型鏈。通過原型鏈,即可實現繼承。首先將父類對象的實例給子類的原型 ChildCons.prototype = new ParentCons(),再在子類構造函數中調用父類構造函數將繼承的屬性初始化。