前端工程師必須掌握的設計模式
建構函式模式 —— Constructor
建構函式相信大家都不會陌生
在JS裡,我們對建構函式使用new來新增例項
核心
1.將屬性繫結到this上
2.將方法繫結到prototype上
3.使用new來新增例項【建立不同的引用型別】
案例
function People() { this.name = '人' } People.prototype.walk = function () { console.log('walk') } let xiaoming = new People()
工廠模式 —— Factory
顧名思義,工廠模式就是像是工廠一樣流水線般生產處一個個物件
核心
1.return一個物件
2.建立不同的引用型別
案例
function createPerson() { // 定義工廠 let person = { name: '人', walk: function () { console.log('walk') } } return person // 返回一個物件 } let xiaoming = createPerson() // 工廠生產物件
單例模式 —— Singleton
核心
1.產生一個類的唯一例項
2.好處就是節約記憶體
案例
function createPeople() { let name return function (userName) { return name || (name = userName) } } let single = createPeople() console.log(single('人')) // '人' // 不管再傳遞任何值,也只會返回 '人' console.log(single('馬')) // '馬'
混合模式 —— Mixin
核心
1.在JS中,一般我們實現繼承的過程就是混合模式
2.其概念就是提供能夠被一個或者一組子類簡單繼承功能的類
案例
function People(name, age) { this.name = name this.age = age } People.prototype.sayName = function () { console.log(this.name) } function Student(name, age, score) { People.call(this, name, age) this.score = score } function create(prototypeObj) { let empty = function () {} empty.prototype = prototypeObj return new empty() // return值如下 // { // __proto__:prototypeObj // } } Student.prototype = create(People.prototype) Student.prototype.work = function () { console.log('work') }
模組模式 —— Module
核心
在js中,常常使用閉包的形式來實現
案例
let Person = !(function () { let name = '小明' function sayName() { console.log(name) } return { name: name, sayName: sayName } })()
釋出訂閱模式 —— Publish/Subscribe
核心
比如我【訂閱者】現在訂閱了一個公眾號,公眾號【釋出者】向我釋出訊息
案例
實現一個jQuery的釋出訂閱案例
// 訂閱者 $('div').on('click',function () {}) // 釋出者 $('header').on('click',function () { $('div').trigger('click') })
程式碼
let EventCenter = (function () { let events = {} function on(evt, handler) { // 實現監聽效果 // 使用'或'是為了可以對同一個事件多次進行回撥 events[evt] = events[evt] || [] events[evt].push({ handler: handler }) } function fire(evt, args) { if (!events[evt]) { // 如果未監聽任何事件,直接中斷 return } for (let i = 0; i < events[evt].length; i++) { // 遍歷,實現對同一個事件的多次回撥 events[evt][i].handler(args) } } function off(name) { delete events[name] } return { on: on, // 訂閱者 fire: fire, // 釋出者 off: off // 取消訂閱 } })() EventCenter.on('hello', function (num) { console.log(num) }) EventCenter.on('hello', function (num) { console.log(num) }) EventCenter.fire('hello', 1) // 1[出現兩次]
相關文章
- 優秀前端開發工程師必須掌握的七大技能前端工程師
- Java開發工程師進階篇-必掌握的常用設計模式Java工程師設計模式
- 設計模式與前端工程師設計模式前端工程師
- JVM-Java工程師必須掌握的知識點JVMJava工程師
- 程式設計師必須掌握的資料結構 2程式設計師資料結構
- Java程式設計師必須掌握的5個註解!Java程式設計師
- 程式設計師必須掌握的資料結構 1程式設計師資料結構
- Java程式設計師必須掌握的Spring依賴管理原理Java程式設計師Spring
- 程式設計師必須掌握的核心演算法有哪些?程式設計師演算法
- 程式設計師生存指南:你必須要掌握的兩點!程式設計師
- 前端程式設計師必須掌握之三角函式在前端動畫中的應用前端程式設計師函式動畫
- 前端必須掌握的知識點前端
- 作為一名前端開發工程師,你必須掌握的WEB模板引擎:Handlebars前端工程師Web
- 【Linux常用命令①】程式設計師必須掌握的Linux命令Linux程式設計師
- Java程式設計師必須掌握的7個Java效能指標!Java程式設計師指標
- 列舉幾個Java程式設計師通用的、必須掌握的框架Java程式設計師框架
- 前端設計師必須知道的10個重要的CSS技巧前端CSS
- 為什麼說 Java 程式設計師必須掌握 Spring Boot ?Java程式設計師Spring Boot
- shell程式設計必須要掌握的命令-xargs程式設計
- 牛逼程式設計師必須要掌握金字塔思維程式設計師
- JAVA程式設計師“黃金5年”必須要掌握的知識技能Java程式設計師
- 面試阿里P6,Java程式設計師必須掌握的技術面試阿里Java程式設計師
- Web前端開發工程師必須瞭解的HTTP知識Web前端工程師HTTP
- 7個Web前端程式設計師必須會用CSS技巧Web前端程式設計師CSS
- 為什麼說 Java 程式設計師到了必須掌握 Spring Boot 的時候?Java程式設計師Spring Boot
- 學習web前端,必須要掌握的CSS原理Web前端CSS
- UI設計培訓學習中必須掌握的設計原則UI
- java程式設計師進階架構師你必須掌握的架構知識體系Java程式設計師架構
- Java程式設計師必須要掌握這10種工具,缺一不可!Java程式設計師
- 好程式設計師分享SpringBoot須掌握的註解程式設計師Spring Boot
- Java程式設計師微服務架構你必須要掌握的十個要點Java程式設計師微服務架構
- 為什麼Linux運維工程師必須學習Shell程式設計?Linux運維工程師程式設計
- 程式設計師必須要了解的web安全程式設計師Web
- 前端工程師須知的CORS知識前端工程師CORS
- JavaScript大師必須掌握的12個知識點JavaScript
- 五分鐘學後端技術:如何學習Java工程師必須掌握的RPC後端Java工程師RPC
- 玖章算術CEO葉正盛:程式設計師必須掌握的資料庫原理程式設計師資料庫
- 前端工程師必備:前端的模組化前端工程師