js 實(shí)現(xiàn)watch監(jiān)聽數(shù)據(jù)變化的代碼
1.js
/** * @desc 屬性改變監(jiān)聽,屬性被set時(shí)出發(fā)watch的方法,類似vue的watch * @author Jason * @study https://www.jianshu.com/p/00502d10ea95 * @data 2018-04-27 * @constructor * @param {object} opts - 構(gòu)造參數(shù). @default {data:{},watch:{}}; * @argument {object} data - 要綁定的屬性 * @argument {object} watch - 要監(jiān)聽的屬性的回調(diào) * watch @callback (newVal,oldVal) - 新值與舊值 */ class watcher{ constructor(opts){ this.$data = this.getBaseType(opts.data) === 'Object' ? opts.data : {}; this.$watch = this.getBaseType(opts.watch) === 'Object' ? opts.watch : {}; for(let key in opts.data){ this.setData(key) } } getBaseType(target) { const typeStr = Object.prototype.toString.apply(target); return typeStr.slice(8, -1); } setData(_key){ Object.defineProperty(this,_key,{ get: function () { return this.$data[_key]; }, set : function (val) { const oldVal = this.$data[_key]; if(oldVal === val)return val; this.$data[_key] = val; this.$watch[_key] && typeof this.$watch[_key] === 'function' && ( this.$watch[_key].call(this,val,oldVal) ); return val; }, }); } } // export default watcher;
2.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>wathc</title> </head> <body> <script src="./watch.js"></script> <script> let wm = new watcher({ data:{ a: 0, b: 'hello' }, watch:{ a(newVal,oldVal){ console.log(newVal, oldVal); // 111 0 } } }) wm.a = 111 </script> </body> </html>
3. 給vm.a 從新賦值 就能看到 newVal 和oldVal的變化
總結(jié)
以上所述是小編給大家介紹的js 實(shí)現(xiàn)watch監(jiān)聽數(shù)據(jù)變化的代碼,希望對(duì)大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
- JS如何監(jiān)聽div的resize事件詳解
- JavaScript 監(jiān)聽組合按鍵思路及代碼實(shí)現(xiàn)
- JavaScript如何實(shí)現(xiàn)監(jiān)聽鍵盤輸入和鼠標(biāo)監(jiān)點(diǎn)擊
- NodeJS多種創(chuàng)建WebSocket監(jiān)聽的方式(三種)
- js實(shí)現(xiàn)無刷新監(jiān)聽URL的變化示例代碼詳解
- JavaScript監(jiān)聽鍵盤事件代碼實(shí)現(xiàn)
- 使用JS監(jiān)聽鍵盤按下事件(keydown event)
- javascript事件監(jiān)聽與事件委托實(shí)例詳解
- 如何用JS實(shí)現(xiàn)簡(jiǎn)單的數(shù)據(jù)監(jiān)聽
相關(guān)文章
基于aotu.js實(shí)現(xiàn)微信自動(dòng)添加通訊錄中的聯(lián)系人功能
這篇文章主要介紹了利用aotu.js實(shí)現(xiàn)微信自動(dòng)添加通訊錄中的聯(lián)系人,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05js實(shí)現(xiàn)簡(jiǎn)單分頁(yè)導(dǎo)航欄效果
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)簡(jiǎn)單分頁(yè)導(dǎo)航欄效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06JS+CSS實(shí)現(xiàn)可以凹陷顯示選中單元格的方法
這篇文章主要介紹了JS+CSS實(shí)現(xiàn)可以凹陷顯示選中單元格的方法,實(shí)例分析了javascript操作css的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03javascript實(shí)現(xiàn)Email郵件顯示與刪除功能
這篇文章主要介紹了javascript實(shí)現(xiàn)Email郵件顯示與刪除功能,需要的朋友可以參考下2015-11-11用Javascript檢查Adobe PDF插件是否安裝的實(shí)現(xiàn)代碼
用Javascript檢查Adobe PDF插件是否安裝的代碼2009-12-12js/jquery控制頁(yè)面動(dòng)態(tài)加載數(shù)據(jù) 滑動(dòng)滾動(dòng)條自動(dòng)加載事件的方法
下面小編就為大家?guī)硪黄猨s/jquery控制頁(yè)面動(dòng)態(tài)加載數(shù)據(jù) 滑動(dòng)滾動(dòng)條自動(dòng)加載事件的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02