Javascript高階程式設計學習筆記(20)—— 建立物件
阿新 • • 發佈:2018-12-23
由於今天有點事,加上物件原型鏈的東西有點多,所以今天這篇就講一個小的知識點吧
也算為明天的物件繼承做鋪墊
工廠模式
雖然使用物件字面量來建立一個物件十分地便捷,但是這個方法有一個顯著的缺點
那就是如果我們需要為一個介面建立多個物件,那麼將會產生大量的重複程式碼
所以工廠模式氤氳而生
所謂工廠模式,也就是讓我們的程式碼成為一個工廠,通過這個工廠我們可以源源不斷地產生同一產品
其大體實現如下
function createPerson(age,job,name){ var o = new Object(); o.name = name; o.age= age; o.job = job; o.sayName = function(){ alert(o.name); } return o; }
通過上面這樣一種方式我們就可以很便捷地生成一種具有三個屬性一個方法的物件
雖然這種方法解決了重複程式碼的問題,但是還有一個問題,對於多個相似的物件我們如何識別物件型別的問題
也就是說這樣的方式我們沒法判斷物件的型別
建構函式模式
剛才的問題,建構函式模式就是答案
通過該模式我們就可以使用 instanceof 操作符來判斷一個物件的型別
以剛才的工廠模式建立的物件舉例
其建構函式模式基本實現如下:
function Person(age,job,name){ this.age =age; this.name = name; this.job = job' this.sayName = function(){ alert(this.name); } }
這種方法在使用上也與工廠模式有所區別,工廠模式實際上就是封裝了建立一類物件的函式
而建構函式模式不能直接呼叫,如果直接呼叫將會為全域性物件(window)建立age、name、job、sayName幾個屬性
要使用 new 操作符來進行呼叫
new操作符實現的功能在前幾篇文章中已經詳細介紹了
這裡就不再贅述
原型模式
雖然建構函式解決了識別物件型別的問題
但是還有一個問題,拿剛才的例子來說,建構函式為每一個例項都建立了一個sayName的函式
而實際上這一步驟是沒有必要的
這樣如果建立了大量例項的情況下,會佔用瀏覽器大量的記憶體
為了解決這一問題,原型模式誕生了
由於這裡會涉及到原型鏈相關的東西,具體內容留到明天詳細介紹