前端工程師必須掌握的設計模式
建構函式模式 —— 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[出現兩次]
相關文章
- 前端必須掌握的知識點前端
- 優秀前端開發工程師必須掌握的七大技能前端工程師
- shell程式設計必須要掌握的命令-xargs程式設計
- Web設計師必須掌握的六大設計策略Web
- Java開發工程師進階篇-必掌握的常用設計模式Java工程師設計模式
- Java 程式設計師必須掌握的 Linux 命令Java程式設計師Linux
- 學習web前端,必須要掌握的CSS原理Web前端CSS
- 前端程式設計師必須掌握之三角函式在前端動畫中的應用前端程式設計師函式動畫
- 程式設計師必須掌握哪些演算法?程式設計師演算法
- UI設計培訓學習中必須掌握的設計原則UI
- 程式設計師必須掌握的資料結構 1程式設計師資料結構
- 程式設計師必須掌握的資料結構 2程式設計師資料結構
- Java程式設計師必須掌握的5個註解!Java程式設計師
- Java程式設計師面試必須要掌握的面試題Java程式設計師面試題
- 程式設計師必須掌握的五個seo知識程式設計師
- JVM-Java工程師必須掌握的知識點JVMJava工程師
- 作為一名前端開發工程師,你必須掌握的WEB模板引擎:Handlebars前端工程師Web
- 程式設計師必須掌握的核心演算法有哪些?程式設計師演算法
- 程式設計師生存指南:你必須要掌握的兩點!程式設計師
- 設計模式與前端工程師設計模式前端工程師
- 前端er必須掌握的資料視覺化技術前端視覺化
- 小白學Web前端必須掌握的4項基礎技能!Web前端
- 淺解前端必須掌握的演算法(四):希爾排序前端演算法排序
- Git中~你必須掌握的!Git
- Java Annotation 必須掌握的特性Java
- 你必須掌握的視覺化大屏開發模式視覺化模式
- Java程式設計師必須掌握的Spring依賴管理原理Java程式設計師Spring
- Java程式設計師必須掌握的7個Java效能指標!Java程式設計師指標
- 列舉幾個Java程式設計師通用的、必須掌握的框架Java程式設計師框架
- 淺解前端必須掌握的演算法(五):堆排序(下)前端演算法排序
- 淺解前端必須掌握的演算法(一):氣泡排序前端演算法排序
- 淺解前端必須掌握的演算法(五):堆排序(上)前端演算法排序
- 六個前端開發工程師必備的Web設計模式/模組資源前端工程師Web設計模式
- 前端設計師必須知道的10個重要的CSS技巧前端CSS
- 面試阿里P6,Java程式設計師必須掌握的技術面試阿里Java程式設計師
- Java程式設計師必須掌握的8大排序演算法Java程式設計師排序演算法
- CSS中那些必須掌握的概念CSS
- 為什麼說 Java 程式設計師必須掌握 Spring Boot ?Java程式設計師Spring Boot