搜尋
首頁web前端js教程JavaScript設計模式之工廠模式與建構器模式_javascript技巧

什麼是模式

前陣子準備期末考試,勞神又傷身的,實在閒不得空來更新文章,今天跟大家說說javascript中的設計模式。

首先呢,我們需要知道的是:模式是一種可重複使用的解決方案,而反模式呢就是針對某個問題的不良解決方案。

js反模式常見範例

1.向setTimeout和setInterval傳遞字串,而不是函數,這會觸發eval()的內部使用。
2.在全域上下文中定義大量的變數污染全域命名空間
3.修改Object類別的原型
4.以內聯形式使用js,嵌入在HTML檔案中的js程式碼是無法包含在外部單元測試工具中的。
5.濫用document.write,如果在頁面載入完成後執行docume.write,它會重寫我們所在的頁面,可以使用document.creatElement代替的話就盡量不用docume.write。

設計模式的類別

建立型設計模式

創建型設計模式專注於處理物件創建機制,以適合給定情況的方式來建立物件。屬於這個類別的屬性包括:

Constructor構造器、Factory工廠、Abstract抽象、Prototype原型、Singleton單例和Builder產生器

結構型設計模式

結構型模式與物件組合有關,通常可以用來找出在不同物件之間建立關係的簡單方法。
屬於這個類別的模式包括:

Decorator裝飾者、Facade外觀、Flyweight享元、Adapter適配器和Proxy代理

行為設計模式

行為模式專注於改善或簡化系統中不同物件之間的溝通。

行為模式包括:

Iterator迭代器、Mediator中介者、Observer觀察者和Visitor訪客

Factory(工廠)模式

為了解決多個類似物件宣告的問題,我們可以使用一種稱為 工廠模式的方法,這種方法 就是為了解決實例化物件產生大量重複的問題。

複製程式碼 程式碼如下:


工廠模式的分類

工廠模式分為簡單工廠、抽象工廠和智慧工廠,工廠模式不顯示地要求使用一個建構函數。

簡單工廠模式:使用一個類別(通常為單體)來產生實例。
複雜工廠模式:使用子類別來決定一個成員變數應該是哪個特定的類別的實例。

工廠模式之利

主要好處就是可以消除物件間的耦合,透過使用工程方法而不是new關鍵字。將所有實例化的程式碼集中在一個位置防止程式碼重複。
工廠模式之弊

大多數類別最好使用new關鍵字和建構函數,可以讓程式碼更簡單易讀。而不必去查看工廠方法來知道。   
工廠模式解決了重複實例化的問題 ,但還有一個問題,那就是識別問題,因為根本無法 搞清楚他們到底是哪個對象的實例。

複製程式碼 程式碼如下:

alert(typeof test1); //Object
alert(test1 instanceof Object); //true

何時使用工廠模式?

Factory模式主要在以下場景使用:

1.當物件或組件涉及高複雜性時
2.當需要根據所在的不同環境輕鬆產生物件的不同實例時
3.處理許多共享相同屬性的小型物件或元件時

Constructor(構造器)模式

ECMAScript 中可以採用建構子(建構方法)可用來建立特定的物件。 此模式正好可以解決以上的工廠模式無法辨識物件實例的問題。

複製程式碼 程式碼如下:


使用建構函式的方法 ,即解決了重複實例化的問題 ,又解決了物件辨識的問題,模式與工廠模式的不同之處在於:

1.建構函式方法沒有顯示的建立物件 (new Object());
2.直接將屬性和方法賦值給 this 物件;
3.沒有 renturn 語句。

建構函式的方法有一些規範:

1.函數名和實例化構造名相同且大寫, (PS:非強制,但這麼寫有助於區分構造函數和 普通函數);
2.透過建構函數建立物件,必須使用 new 運算子。 
既然透過建構函式可以建立對象,那麼這個物件是哪裡來的, new Object()在什麼地方執行了?執行的過程如下:

1.當使用了建構子,並且 new 建構子(),那麼就後台執行了 new Object();
2.將建構函數的作用域給新物件 ,(即 new Object()建立的物件),而函數體內的 this 就代表 new Object()出來的物件。
3.執行建構函式內的程式碼;
4.返回新物件(後台直接返回)。

帶原型的Constructor(構造器)

js中有一個名為prototype的屬性。呼叫js建構器建立一個物件後,新物件就會具有建構器原型的所有屬性。透過這種方式,可以建立多個Car對象,並存取相同的原型。

複製程式碼 程式碼如下:

  

現在run()的單一實例就能夠在所有Car物件之間共用。
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript:探索網絡語言的多功能性JavaScript:探索網絡語言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python還是JavaScript更好?Python還是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

如何安裝JavaScript?如何安裝JavaScript?Apr 05, 2025 am 12:16 AM

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

在Quartz中如何在任務開始前發送通知?在Quartz中如何在任務開始前發送通知?Apr 04, 2025 pm 09:24 PM

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...

在JavaScript中,如何在構造函數中獲取原型鏈上函數的參數?在JavaScript中,如何在構造函數中獲取原型鏈上函數的參數?Apr 04, 2025 pm 09:21 PM

在JavaScript中如何獲取原型鏈上函數的參數在JavaScript編程中,理解和操作原型鏈上的函數參數是常見且重要的任�...

微信小程序webview中Vue.js動態style位移失效是什麼原因?微信小程序webview中Vue.js動態style位移失效是什麼原因?Apr 04, 2025 pm 09:18 PM

在微信小程序web-view中使用Vue.js動態style位移失效的原因分析在使用Vue.js...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境