遊戲陪玩平臺原始碼開發,依賴收集和觸發的實現
概述
在遊戲陪玩平臺原始碼開發中,依賴收集和觸發比較複雜,不容易理解。今天我們們將它最簡化的講出來。
前期準備
1、宣告一個Map做儲蓄;
2、current用來傳遞資料;
3、data資料備用;
const map = new Map(); let current = null; const data = { name: 'madapao', age: 18, sex: '男', }
建立一個Watcher類
deps陣列收集遊戲陪玩平臺原始碼依賴,add方法新增遊戲陪玩平臺原始碼依賴。
class Watcher { constructor() { this.deps = []; } add(dep) { this.deps.push(dep) } }
收集和觸發
對data中的資料進行劫持:
-
get:判斷map中有沒有這個key,如果沒有,就新建一個watcher,把current(current是什麼等訪問的時候就知道了)加進行watcher的deps中,每個key在map中對應一個watcher。如果已經有了,直接拿出來wathcer,把current加進行watcher的deps中。
-
set:拿出map中key對應的watcher,把它deps中的方法全部執行一次。
Object.keys(data).forEach(key => { Object.defineProperty(data, key, { get() { if (map.has(key)) { const watcher = map.get(key); watcher.add(current); map.set(key, watcher) } else { const watcher = new Watcher(); watcher.add(current); deps.set(key, watcher); } }, set() { if (map.has(key)) { map.get(key).deps.forEach(fn => fn()) } } }) })
使用
在執行getAgeName方法,暫時把getAgeName賦值給current,使用data中資料key時。就會觸發key的get。把getAgeName放進key對應watcher的deps中。
當修改key的值時,就會觸發key對應watcher收集到的所有方法。
function getAgeName() { current = getAgeName; console.log('getAgeName執行了') return `${data.name}'今年'${data.age}歲。` } function getSexName() { current = getSexName; console.log('getSexName執行了') return `${data.name}'是一個'${data.sex}人。` } getAgeName(); getSexName(); data.name = 'mahaha';
全部程式碼
const deps = new Map(); let current = null; class Watcher { constructor() { this.deps = []; } add(dep) { this.deps.push(dep) } } const data = { name: 'madapao', age: 18, sex: '男', } Object.keys(data).forEach(key => { Object.defineProperty(data, key, { get() { if (deps.has(key)) { const watcher = deps.get(key); watcher.add(current); deps.set(key, watcher) } else { const watcher = new Watcher(); watcher.add(current); deps.set(key, watcher); } }, set() { if (deps.has(key)) { deps.get(key).deps.forEach(fn => fn()) } } }) }) function getAgeName() { current = getAgeName; console.log('getAgeName執行了') return `${data.name}'今年'${data.age}歲。` } function getSexName() { current = getSexName; console.log('getSexName執行了') return `${data.name}'是一個'${data.sex}人。` } getAgeName(); getSexName(); data.name = 'mahaha';
以上便是“遊戲陪玩平臺原始碼開發,依賴收集和觸發的實現”的全部內容,希望對大家有幫助。
本文轉載自網路,轉載僅為分享乾貨知識,如有侵權歡迎聯絡雲豹科技進行刪除處理
原文連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2847720/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 從原始碼解析vue的響應式原理-依賴收集、依賴觸發原始碼Vue
- 遊戲陪玩平臺原始碼開發,聊天室內的禮物連擊效果的實現遊戲原始碼
- 遊戲陪玩系統原始碼開發,如何實現圖片和動畫的優化?遊戲原始碼動畫優化
- 遊戲陪玩app原始碼開發,常用的倒數計時功能如何實現?遊戲APP原始碼
- 遊戲陪玩平臺原始碼,日期格式化的程式碼分析遊戲原始碼
- 用 Go + Redis 實現陪玩平臺原始碼中的分散式鎖GoRedis原始碼分散式
- 遊戲陪玩原始碼開發,正確認識節流和防抖遊戲原始碼
- Android開發好用的依賴庫和工具收集Android
- 遊戲陪玩app開發,訊息可靠性的實現遊戲APP
- 遊戲陪玩系統開發,音視訊混流的實現程式碼遊戲
- 陪玩平臺原始碼中的排序演算法,插入排序的實現原始碼排序演算法
- 如何開發陪玩系統原始碼的列表頁面,相關實現程式碼原始碼
- 遊戲陪玩原始碼前端開發,不容忽視的五個要點遊戲原始碼前端
- 在遊戲陪玩原始碼開發中,兩種清空陣列的方式遊戲原始碼陣列
- 【Vue原始碼學習】依賴收集Vue原始碼
- 如何用分散式鎖解決陪玩平臺原始碼中的併發問題?分散式原始碼
- 遊戲陪玩app原始碼開發,啟動速度優化與監控遊戲APP原始碼優化
- 直播平臺原始碼開發,簽到功能的實現原始碼
- 遊戲陪玩系統開發,Java怎樣實現流合併?遊戲Java
- 陪玩系統原始碼開發,H5頁面中呼叫支付功能的實現原始碼H5
- 遊戲陪玩原始碼前端效能優化,開發階段可採取的措施遊戲原始碼前端優化
- 什麼是遊戲陪玩app原始碼開發的過度設計,如何避免?遊戲APP原始碼
- 如何在遊戲陪玩系統原始碼中實現“刮刮樂”效果?遊戲原始碼
- 如何實現遊戲陪玩系統原始碼前端效能監控?遊戲原始碼前端
- Vue原始碼閱讀 – 依賴收集原理Vue原始碼
- Vue原始碼閱讀 - 依賴收集原理Vue原始碼
- 遊戲陪玩系統開發,日期時間選擇介面的實現遊戲
- 遊戲陪玩原始碼的移動端適配,應該如何實現?遊戲原始碼
- 遊戲陪玩原始碼開發中,頁面跳轉方式及生命週期分析遊戲原始碼
- 使用者互動聊天,看陪玩平臺原始碼怎麼透過html實現原始碼HTML
- 陪玩平臺原始碼實現類似手機懸浮按鈕,需要如何做?原始碼
- 遊戲陪玩app開發,前端實現一個輪詢需要如何做?遊戲APP前端
- Vue原始碼學習(九):響應式前置:實現物件的依賴收集(dep和watcher)Vue原始碼物件
- 遊戲陪玩原始碼的登入方式,簡訊驗證碼登入的實現遊戲原始碼
- 遊戲陪玩系統開發,業務程式碼判斷生產/開發環境的方式遊戲開發環境
- 遊戲陪玩系統開發,架構設計的開閉原則是如何實現的?遊戲架構
- 從比心APP原始碼的成功,分析陪玩系統原始碼應該如何開發APP原始碼
- 遊戲陪玩app開發,高併發系統如何設計?遊戲APP