文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

使用JavaScript怎么实现数据监听

2023-06-14 23:30

关注

使用JavaScript怎么实现数据监听?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

javascript是一种什么语言

javascript是一种动态类型、弱类型的语言,基于对象和事件驱动并具有相对安全性并广泛用于客户端网页开发的脚本语言,同时也是一种广泛用于客户端Web开发的脚本语言。它主要用来给HTML网页添加动态功能,现在JavaScript也可被用于网络服务器,如Node.js。

主要是用Object.defineProperty实现类似vue的数据绑定。

第一步

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被读取了,因为defineProperty对data的name字段进行的监听劫持,修改了,name字段本应该返回的值。

第二步

const _data = { ...data }for(let i in data){  Object.defineProperty(data, i, {    get(){      return _data[i]+"经过了js的修改"    },    set(val){      _data[i] = val;    }  })}

为什么需要单独的_data?

回答:监听了data的字段,并修改了字段的返回属性,导致的影响就是,每次获取data内监听的字段时候,浏览器都会调用get返回的值,如果你get里直接返回return data[i]的话,就会导致浏览器不停的调用get方法,从而进入到一个死循环当中。

给data多添加一点数据

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类型,那么调用WatchObject,在进行子元素的遍历及监听       //WatchObject会在下面的代码中进行创建       return WatchObject(val,path.concat(parentKey), event)    }广州品牌设计公司https://www.houdianzi.com

格式化object对象,监听值

const WatchObject = (data, path, event) => {  function WatchObject(){    for(var key in data){        //调用之前创建的函数,格式化val        data[key] = createNewWatch(data[key], path, key, event)        //创建对数据key的监听        defineProperty(this, key, data[key], path.concat(key), event)    }  }  return new WatchObject()}

最后执行代码,一个简单的数据监听就完成了。

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

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯