首页 > 其他分享 >Vue 侦听器实现

Vue 侦听器实现

时间:2023-02-04 21:22:27浏览次数:43  
标签:Vue keys 实现 value walk 侦听器 obj

class Observer {
  constructor(value){
    this.value = value
    if(Array.isArray(value)){
      // 数组的逻辑
    }else {
      // 对象的逻辑
      this.walk(value)
    }
  }

  walk(obj) {
    const keys = Object.keys(obj)
    for(let i = 0;i <= keys.length;i++){
      defineReactive(obj,keys[i])
    }
  }
}

function defineReactive(obj,key){
  let val = obj[key]
  if(typeof val === 'object'){
    new Observer(val)
  }
  Object.defineProperty(obj,key,{
    get(){
      console.log(`${key}属性背读取了`)
      return val
    },
    set(newValue){
      console.log(`${key}的属性背修改了,新值为${newValue}`)
      val = newValue 
    }
  })
}

const obj = {
  a:1,
  b:2,
  c:{
    d:1
  }
}

const newObj = new Observer(obj)

标签:Vue,keys,实现,value,walk,侦听器,obj
From: https://www.cnblogs.com/landuo629/p/17092425.html

相关文章

  • 动态代理-RPC实现核心原理
    实现过统一拦截吗?如授权认证、性能统计,可以用SpringAOP,不需要改动原有代码前提下,还能实现非业务逻辑跟业务逻辑的解耦。核心就是动态代理,通过对字节码进行增强,在方法调用......
  • 图解B树及C#实现(3)数据的删除
    目录前言从叶子节点删除数据从非叶子节点删除数据提前扩充只有t-1的Item的节点:维持B树平衡的核心算法从左兄弟节点借用Item从右兄弟节点借用Item与左兄弟节点或者......
  • vuejs从入门到精通——watch侦听器
    watch侦听器https://cn.vuejs.org/guide/essentials/watchers.html虽然计算属性在大多数情况下更适合,但有时也需要一个自定义的侦听器。 这就是为什么vue通过watch......
  • 前端UI组件 | 如何实现一个骨架屏组件
    前言在过去的两个月中,我们的移动端项目重构UI组件,表单组件、Layout布局、弹框提示、导航、Card卡片等基础组件已经完成并应用到日常功能开发中。一期的开发中,我们把基础的常......
  • 从0写TCPIP协议栈3:以太网包的收发实现
    协议传输机制WEB服务器和客户计算机得交互过程简述如下:1、应用层协议栈软件将文件数据进行提取封装,并添加HTTP协议报头向传输层进行传输2、传输层协议栈软件在上层传递......
  • 关于长链剖分的数组实现 | CF1009F Dominant Indices
    请容许我不理解一下为什么这题题解几乎全都是指针实现/kk其实长链剖分是可以直接用数组来写的。考虑朴素DP。设\(f_{u,i}\)表示以点\(u\)为根的子树中与点\(u\)距......
  • 降低vue/cli版本,从5.0.8换到4.4.6
    由于之前装了最新版的vue/cli,最新版的脚手架用的是vue3,不仅要重新学vue3的语法,而且elementui也用不了,用element-plus,等价于--->本人不会!因此今天换vue脚手架的版本,等以后有......
  • vuejs从入门到精通——计算属性缓存 vs 方法
    计算属性缓存vs方法https://cn.vuejs.org/guide/essentials/computed.html#basic-exampletemplate:<p>{{calculateBooksMessage()}}</p>js://组件中fun......
  • vuejs从入门到精通——可写计算属性
    可写计算属性https://cn.vuejs.org/guide/essentials/computed.html#basic-example 计算属性默认是只读的。当你尝试修改一个计算属性时,你会收到一个运行时警告。只在......
  • vuejs从入门到精通——计算属性
    计算属性https://cn.vuejs.org/guide/essentials/computed.html模板中的表达式虽然方便,但也只能用来做简单的操作。如果在模板中写太多逻辑,会让模板变得臃肿,难以维护。......