js实现shallowReactive和reactive

简介: js实现shallowReactive和reactive
// shallowReactive(浅的监视,浅的劫持,浅的响应式数据)与reactive(深的)
// 定义一个reactiveHandler处理对象
let reactiveHandler = {
  // 获取属性值
  get(target, prop) {
    // 这里的result返回1
    const result = Reflect.get(target, prop)
    console.log('拦截到get', prop, result)
    return result
  },
  // 修改属性值或是添加属性
  set(target, prop, value) {
    // 这里的result返回true
    const result = Reflect.set(target, prop, value)
    console.log('拦截到set', prop, value, result)
    return result
  },
  // 删除某个属性
  deleteProperty(target, prop) {
    // 这里的result返回true
    const result = Reflect.deleteProperty(target, prop)
    console.log('拦截到deleteProperty', prop, result)
    return result
  }
}
// 定义一个shallowReactive函数,传入一个目标对象
function shallowReactive(target) {
  // 两种情况,如果是单值,就直接反回,如果数据类型是object,就给属性添加proxy
  if (target && typeof target === "object") {
    return new Proxy(target, reactiveHandler)
  } else {
    return target
  }
}
// 定义一个reactive函数,传入一个目标对象
function reactive(target) {
  // 判断当前的目标对象是不是object类型(数组/对象)
  if (target && typeof target === "object") {
    // 先判断当前的数据是不是数组
    if (Array.isArray(target)) {
      // 数组的数据要进行遍历
      target.forEach((item, i) => {
        target[i] = reactive(item)
      })
    } else {
      // 如果是对象
      Object.keys(target).forEach(key => {
        target[key] = reactive(target[key])
      })
    }
  } else {
    // 如果传入的数据类型是基本数据类型,那么就直接返回
    return target
  }
}
相关文章
|
5月前
|
JavaScript 前端开发
理解Vue.js 3的Reactive方法
理解Vue.js 3的Reactive方法
52 1
|
12月前
|
JavaScript
深入剖析Vue.js源码:探寻ref的神奇之处,为什么它比reactive更强大?
深入剖析Vue.js源码:探寻ref的神奇之处,为什么它比reactive更强大?
深入剖析Vue.js源码:探寻ref的神奇之处,为什么它比reactive更强大?
|
JavaScript 算法 前端开发
【前端算法】JS实现数字千分位格式化
JS实现数字千分位格式化的几种思路,以及它们之间的性能比较
339 1
|
存储 前端开发 算法
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
158 0
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
|
存储 机器学习/深度学习 JavaScript
JS 你最少用几行代码实现深拷贝?
JS 你最少用几行代码实现深拷贝?
JS 你最少用几行代码实现深拷贝?
|
JavaScript 前端开发 算法
JavaScript实现一段时间之后关闭广告
简介:通过JavaScript实现在一段时间之后,广告消失。
124 0
JavaScript实现一段时间之后关闭广告
|
JavaScript 前端开发 算法
JS实现鼠标悬停变色
本文实现的是利用JS实现当鼠标悬停在表格上的时候,表格发生变色。 CSS渲染 JS逻辑 `
212 0
JS实现鼠标悬停变色
|
JavaScript 前端开发 数据安全/隐私保护
JS实现关闭图片窗口
通过事件的绑定来实现,关闭二维码的效果。
154 0
JS实现关闭图片窗口
|
前端开发 JavaScript Windows
js实现body背景图自动扩缩 光靠css几乎无法实现这样的效果
js实现body背景图自动扩缩 光靠css几乎无法实现这样的效果
190 0
js实现body背景图自动扩缩 光靠css几乎无法实现这样的效果
|
JavaScript 前端开发
利用JavaScript实现二级联动
利用JavaScript实现二级联动 要实现JavaScript二级联动效果,首先要确定需要哪些技术: 二维数组 for in循环 new Option(text,value,true,true) add(option,null) onchange() 表单事件 HTML代码: <!-- <input type="text" id="text"> --> 请选择省份: <select name="" id="provinces"> <!-- <option value="江苏省">江苏省</option>