遊戲陪玩平臺原始碼開發,依賴收集和觸發的實現
概述
在遊戲陪玩平臺原始碼開發中,依賴收集和觸發比較複雜,不容易理解。今天我們們將它最簡化的講出來。
前期準備
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原始碼
- 遊戲陪玩平臺原始碼,日期格式化的程式碼分析遊戲原始碼
- 遊戲陪玩原始碼開發,正確認識節流和防抖遊戲原始碼
- 遊戲陪玩app開發,訊息可靠性的實現遊戲APP
- 遊戲陪玩系統開發,音視訊混流的實現程式碼遊戲
- Android開發好用的依賴庫和工具收集Android
- 在遊戲陪玩原始碼開發中,兩種清空陣列的方式遊戲原始碼陣列
- 遊戲陪玩原始碼前端開發,不容忽視的五個要點遊戲原始碼前端
- 用 Go + Redis 實現陪玩平臺原始碼中的分散式鎖GoRedis原始碼分散式
- 遊戲陪玩app原始碼開發,啟動速度優化與監控遊戲APP原始碼優化
- 如何實現遊戲陪玩系統原始碼前端效能監控?遊戲原始碼前端
- 陪玩平臺原始碼中的排序演算法,插入排序的實現原始碼排序演算法
- 遊戲陪玩系統開發,Java怎樣實現流合併?遊戲Java
- 如何開發陪玩系統原始碼的列表頁面,相關實現程式碼原始碼
- 遊戲陪玩原始碼前端效能優化,開發階段可採取的措施遊戲原始碼前端優化
- 什麼是遊戲陪玩app原始碼開發的過度設計,如何避免?遊戲APP原始碼
- 遊戲陪玩原始碼的移動端適配,應該如何實現?遊戲原始碼
- 【Vue原始碼學習】依賴收集Vue原始碼
- 遊戲陪玩系統開發,日期時間選擇介面的實現遊戲
- 遊戲陪玩原始碼的登入方式,簡訊驗證碼登入的實現遊戲原始碼
- 遊戲陪玩原始碼開發中,頁面跳轉方式及生命週期分析遊戲原始碼
- 如何用分散式鎖解決陪玩平臺原始碼中的併發問題?分散式原始碼
- 如何在遊戲陪玩系統原始碼中實現“刮刮樂”效果?遊戲原始碼
- 遊戲陪玩app開發,前端實現一個輪詢需要如何做?遊戲APP前端
- 直播平臺原始碼開發,簽到功能的實現原始碼
- Vue原始碼閱讀 – 依賴收集原理Vue原始碼
- Vue原始碼閱讀 - 依賴收集原理Vue原始碼
- Vue原始碼學習(九):響應式前置:實現物件的依賴收集(dep和watcher)Vue原始碼物件
- 陪玩系統原始碼開發,H5頁面中呼叫支付功能的實現原始碼H5
- 如何在遊戲陪玩app原始碼中實現簡訊驗證碼登入?遊戲APP原始碼
- 遊戲陪玩系統原始碼中不同排序演算法的實現方式遊戲原始碼排序演算法
- 遊戲陪玩系統開發,架構設計的開閉原則是如何實現的?遊戲架構
- 遊戲陪玩app開發中,Mysql的sql優化方法遊戲APPMySql優化
- 遊戲陪玩app開發,高併發系統如何設計?遊戲APP
- 遊戲陪玩系統開發,業務程式碼判斷生產/開發環境的方式遊戲開發環境