Vue2中响应式的原理

Vue2中实现响应式的原理

vue2实现原理

使用Object.defineProperty()的get()与set()来实现响应式

javascript 复制代码
<script>
    let p = {}
    let person = {
        name: "张三",
        sex:"男",
        hobby: ["吃饭","睡觉"]
    }
    Object.defineProperty(p,"age",{
        // value: 18,
        // enumerable: true, //是否可以遍历,默认 false
        // writable: true,  //是否可以修改,默认 false
        configurable: true, //是否可以被删除,默认 false
        get(){
            console.log("有人读取了age属性")
            return p.age;
        },
        set(value){
            console.log("有人修改了age属性")
            p.age = value
        }
    })
</script>

Vue2响应式存在的问题

  1. 对象增加属性
javascript 复制代码
this.$set(this.perosn,'age',30)
Vue.set(this.person,"age",30)
  1. 删除对象属性
javascript 复制代码
this.$delete(this.perosn,'age')
Vue.delete(this.person,"age")
  1. 修改数组
javascript 复制代码
this.$set(this.person.hobby,0,"学习")
Vue.set(this.person.hobby,0,"学习")
this.person.hobby.splice(0,1,"学习")
相关推荐
WHOVENLY1 天前
【javaScript】- 笔试题合集(长期更新,建议收藏,目前已更新至31题)
开发语言·前端·javascript
指尖跳动的光1 天前
将多次提交合并成一次提交
前端·javascript
程序员码歌1 天前
短思考第263天,每天复盘10分钟,胜过盲目努力一整年
android·前端·后端
oden1 天前
1 小时速通!手把手教你从零搭建 Astro 博客并上线
前端
若梦plus1 天前
JS之类型化数组
前端·javascript
若梦plus1 天前
Canvas 深入解析:从基础到实战
前端·javascript
若梦plus1 天前
Canvas渲染原理与浏览器图形管线
前端·javascript
C_心欲无痕1 天前
vue3 - 依赖注入(provide/inject)组件跨层级通信的优雅方案
前端·javascript·vue.js
幺零九零零1 天前
全栈程序员-前端第二节- vite是什么?
前端