美文网首页
数据响应Object.defineProperty

数据响应Object.defineProperty

作者: Jabo | 来源:发表于2021-03-23 15:23 被阅读0次
背景

   前端vue框架大火,面试时经常碰到,数据响应是这么实现的。今天快速简单带你实现数据响应

核心Object.defineProperty

let demoObj = {};
let descriptor = {
  configurable: false, // 该属性能否通过delete删除
  writable: false, // 是否可写
  enumerable: false, // 是否可枚举
  value: 'demoObj', // 属性值,默认undefined

  // 当 writable 为true是
  // get:function(){}
  // set:function(){}
}
Object.defineProperty(demoObj, 'demoprop', descriptor)

上代码

/**
 * @param {Object} obj
 * @param {String} key
 * @param {*} val
 * 数据响应式
 */
function defineReactive(obj, key, val) {
  // val 变量由于闭包的存在不会被销毁,一直保持在内存里面
  Object.defineProperty(obj, key, {
    // 获取key值时触发
    get() {
      console.log('get:', key)
      return val
    },
    // 设置key值时触发
    set (newVal) {
      if(newVal !== val){
        console.log('set:', key)
        val = newVal
      }
    }
  })
}

let obj = {}
defineReactive(obj, 'name', '张三')
obj.name  // 触发get
obj.name = '李四' // 触发set
console.log(obj)

创作、分享不易。收藏和点赞是最大的支持!

相关文章

  • 双向绑定

    数据响应式原理 vue实现数据响应式的原理就是利用了Object.defineProperty(),重新定义了对象...

  • Vue常见面试题

    8.6.1响应式数据的理解 概述:响应式数据的实现原理是使用ES5的Object.defineProperty,递...

  • 数据响应Object.defineProperty

    背景    前端vue框架大火,面试时经常碰到,数据响应是这么实现的。今天快速简单带你实现数据响应 核心Objec...

  • Vue 数据响应式

    Vue 数据响应式 getter、setter Object.defineProperty() 该方法会直接在一个...

  • 实现一个 vue 的双向绑定

    vue2.x 使用 Object.defineProperty() 实现数据的响应 原理:递归遍历 data 中的...

  • Vue响应式基本原理

    Vue响应式系统基本原理 Object.defineProperty Object.defineProperty(...

  • 简单实现Vue响应式原理@郝晨光

    前言 Vue的数据双向绑定,响应式原理,其实就是通过Object.defineProperty()结合发布者订阅者...

  • 36.Object.defineProperty和Reflect

    1.使用Object.defineProperty方式准备数据: 将对象响应化 监听数组方法 劫持obj对象的属性...

  • 可能是全x最好的vue教程

    Vue响应式原理 为什么不支持IE8 其实是依赖**Object.defineProperty()**,进行数据挟...

  • Vuex设计思想

    前言 需要对原先分享过的有个初步了解 vue数据响应式的原理 Object.defineProperty 非父子组...

网友评论

      本文标题:数据响应Object.defineProperty

      本文链接:https://www.haomeiwen.com/subject/ktyfhltx.html