前言
雖然使用 Object構造函數 或者使用 對象字面量 可以很方便的用來創建一個對象,但這種方式有一個明顯的缺點:使用一個接口創建多個對象會產生很多冗余的代碼。因此為了解決這個問題,人們開始使用以下幾種方式來常見對象。
工廠模式
該模式抽象了創建對象的具體過程,用函數來以特定接口創建對象的細節
工廠模式測試
工廠方式的問題:使用工廠模式能夠創建一個包含所有信息的對象,可以無數次的調用的這個函數。雖然其解決了創建多個相似對象的問題,但卻沒有解決對象識別的問題(即如何得知一個對象的類型)
構造函數模式
構造函數模式測試
注意構造函數與工廠模式有些不同的地方,如下
構造函數首字母大寫
沒有顯式地創建對象
將屬性和方法賦值給了 this 對象
沒有return語句
而且以這種方式來調用構造函數會大致經歷一下 幾個步驟
創建一個新的對象
將構造函數的作用域賦值給這個對象(因此this就指向了這個對象)
執行構造函數中的代碼(即給新對象添加屬性和方法的過程)
返回對象
注意:構造函數其實和普通的函數沒有太大的差別,唯一的不同在于調用方式的不同。以下演示不同的幾種調用方式
構造函數的問題:使用構造函數最主要的問題就是每個方法都要在每個實例上重新創建一次,p1與p2的都有show方法,但不是同一個Function的實例,因為function在js中也是一個對象。因此他們共有的show方法并不相等。
原型模式
每個函數都有一個prototype屬性,這個屬性是一個指針,指向一個對象。而這個對象的用途是 包含可以由 特定類型 的所有 實例 共享的屬性和方法。即調用構造函數所創建的那個對象的 原型對象
好處是可以讓所有對象的實例共享他的屬性的方法。即無需在構造函數中定義實例的信息
以上內容是關于js面向對象之常見創建對象的幾種方式(工廠模式、構造函數模式、原型模式),希望大家喜歡。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com