电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

如何用JS實(shí)現(xiàn)簡單的數(shù)據(jù)監(jiān)聽

瀏覽:86日期:2024-03-28 11:57:57
概述

主要是用Object.defineProperty實(shí)現(xiàn)類似vue的數(shù)據(jù)綁定。

第一步

const data = { name: 'tom', age: 14}Object.defineProperty(data, 'name', { get(){ return 'name被讀取了' }, set(val){ console.log(‘我被賦值了‘,val) }})//將此代碼放到瀏覽器控制臺查看效果console.log(data.name )

輸出的data.name并不是tom,而是name被讀取了,因?yàn)閐efineProperty對data的name字段進(jìn)行的監(jiān)聽劫持,修改了,name字段本應(yīng)該返回的值。

第二步

const _data = { ...data }for(let i in data){ Object.defineProperty(data, i, { get(){ return _data[i]+'經(jīng)過了js的修改' }, set(val){ _data[i] = val; } })}為什么需要單獨(dú)的_data?

回答:監(jiān)聽了data的字段,并修改了字段的返回屬性,導(dǎo)致的影響就是,每次獲取data內(nèi)監(jiān)聽的字段時候,瀏覽器都會調(diào)用get返回的值,如果你get里直接返回return data[i]的話,就會導(dǎo)致瀏覽器不停的調(diào)用get方法,從而進(jìn)入到一個死循環(huán)當(dāng)中。

給data多添加一點(diǎn)數(shù)據(jù)

const data = { name: 'tom', age: 14, friend: {'name1': '張三','name2': '李四','name3': '王五','name4': '趙六' },}格式化初始值

const createNewWatch = (val, path, parentKey, event) => { //如果值不是object類型,那么直接返回此值 if(typeof val != ‘object‘) return val; //反之如果是object類型,那么調(diào)用WatchObject,在進(jìn)行子元素的遍歷及監(jiān)聽 //WatchObject會在下面的代碼中進(jìn)行創(chuàng)建 return WatchObject(val,path.concat(parentKey), event) }廣州品牌設(shè)計(jì)公司https://www.houdianzi.com格式化object對象,監(jiān)聽值

const WatchObject = (data, path, event) => { function WatchObject(){ for(var key in data){//調(diào)用之前創(chuàng)建的函數(shù),格式化valdata[key] = createNewWatch(data[key], path, key, event)//創(chuàng)建對數(shù)據(jù)key的監(jiān)聽defineProperty(this, key, data[key], path.concat(key), event) } } return new WatchObject()}

最后執(zhí)行代碼,一個簡單的數(shù)據(jù)監(jiān)聽就完成了。

const b = WatchObject(data,[],{ set(path,val){ console.log(path,val) } })

以上就是如何用JS實(shí)現(xiàn)簡單的數(shù)據(jù)監(jiān)聽的詳細(xì)內(nèi)容,更多關(guān)于JS數(shù)據(jù)監(jiān)聽的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 磨煤机配件-高铬辊套-高铬衬板-立磨辊套-盐山县宏润电力设备有限公司 | Duoguan 夺冠集团| 电子天平-华志电子天平厂家 | 铝镁锰板厂家_进口钛锌板_铝镁锰波浪板_铝镁锰墙面板_铝镁锰屋面-杭州军晟金属建筑材料 | CTAB,表面活性剂1631溴型(十六烷基三甲基溴化铵)-上海升纬化工原料有限公司 | LCD3D打印机|教育|桌面|光固化|FDM3D打印机|3D打印设备-广州造维科技有限公司 | 考勤系统_考勤管理系统_网络考勤软件_政企|集团|工厂复杂考勤工时统计排班管理系统_天时考勤 | 沈阳庭院景观设计_私家花园_别墅庭院设计_阳台楼顶花园设计施工公司-【沈阳现代时园艺景观工程有限公司】 | 重庆网站建设,重庆网站设计,重庆网站制作,重庆seo,重庆做网站,重庆seo,重庆公众号运营,重庆小程序开发 | 黑龙江京科脑康医院-哈尔滨精神病医院哪家好_哈尔滨精神科医院排名_黑龙江精神心理病专科医院 | 仓储货架_南京货架_钢制托盘_仓储笼_隔离网_环球零件盒_诺力液压车_货架-南京一品仓储设备制造公司 | 德国BOSCH电磁阀-德国HERION电磁阀-JOUCOMATIC电磁阀|乾拓百科 | 面粉仓_储酒罐_不锈钢储酒罐厂家-泰安鑫佳机械制造有限公司 | 肉嫩度仪-凝胶测试仪-国产质构仪-气味分析仪-上海保圣实业发展有限公司|总部 | 新中天检测有限公司青岛分公司-山东|菏泽|济南|潍坊|泰安防雷检测验收 | 寮步纸箱厂_东莞纸箱厂 _东莞纸箱加工厂-东莞市寮步恒辉纸制品厂 | 桁架楼承板-钢筋桁架楼承板-江苏众力达钢筋楼承板厂 | 上海平衡机-单面卧式动平衡机-万向节动平衡机-圈带动平衡机厂家-上海申岢动平衡机制造有限公司 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 废水处理-废气处理-工业废水处理-工业废气处理工程-深圳丰绿环保废气处理公司 | 制丸机,小型中药制丸机,全自动制丸机价格-甘肃恒跃制药设备有限公司 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 冷却塔降噪隔音_冷却塔噪声治理_冷却塔噪音处理厂家-广东康明冷却塔降噪厂家 | 成都亚克力制品,PVC板,双色板雕刻加工,亚克力门牌,亚克力标牌,水晶字雕刻制作-零贰捌广告 | 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | 定时排水阀/排气阀-仪表三通旋塞阀-直角式脉冲电磁阀-永嘉良科阀门有限公司 | 合肥废气治理设备_安徽除尘设备_工业废气处理设备厂家-盈凯环保 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 北京开源多邦科技发展有限公司官网 | 岛津二手液相色谱仪,岛津10A液相,安捷伦二手液相,安捷伦1100液相-杭州森尼欧科学仪器有限公司 | 搜木网 - 木业全产业链交易平台,免费搜货、低价买货! | 正压密封性测试仪-静态发色仪-导丝头柔软性测试仪-济南恒品机电技术有限公司 | 西装定制/做厂家/公司_西装订做/制价格/费用-北京圣达信西装 | 青岛空压机,青岛空压机维修/保养,青岛空压机销售/出租公司,青岛空压机厂家电话 | 并离网逆变器_高频UPS电源定制_户用储能光伏逆变器厂家-深圳市索克新能源 | 电子天平-华志电子天平厂家 | 河南生物显微镜,全自动冰冻切片机-河南荣程联合科技有限公司 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 全国国际学校排名_国际学校招生入学及学费-学校大全网 | 高铝轻质保温砖_刚玉莫来石砖厂家_轻质耐火砖价格 | 吊篮式|移动式冷热冲击试验箱-二槽冷热冲击试验箱-广东科宝 |