Vue核心基础1:数据代理

1 回顾Object.defineProperty方法

javascript 复制代码
let str = 'hello'
const person = {
     name: '张三',
     age: 18
}

javascript 复制代码
Object.defineProperty(person, 'sex', {
     // value: '男',
     // enumerable: true, // 控制属性是否可以枚举,默认值是false
     // writable: true, // 控制属性是否可以被修改,默认值是false
     // configurable: true, // 控制属性是否可以被删除, 默认为false

     // 当有人读取person的sex属性时,get函数就会被调用,且返回值就是sex的值
     // get: function () {
     //     return str
     // }
     get() {
          return str
     },
     set(value) {
          // 当有人修改person的sex属性时,set函数就会被调用,且会收到修改的具体值
          console.log('有人修改了sex属性,且值是', value)
          str = value
     }
})

javascript 复制代码
console.log(person)
console.log(Object.keys(person))   // enumerable: true
person.sex = '女'  // writable: true
console.log(person)

2 何为数据代理

通过一个对象代理对另一个对象中属性的操作(读/写)

以下代码就是通过obj2来代理obj :

javascript 复制代码
    <script>
        let obj = {
            x: 100
        }
        let obj2 = {
            y: 200
        }
        Object.defineProperty(obj2, 'x', {
            get() {
                return obj.x
            },
            set(value) {
                obj.x = value
            }
        })
        console.log(obj2.x); // 100
        obj2.x = 300
        console.log(obj.x); // 300
    </script>

3 Vue中的数据代理


总结:

  1. Vue中的数据代理:

通过vm对象来代理data中的属性的操作 (读/写)

2.Vue中数据代理的好处:

更加方便地操作data中地数据

3.基本原理:

通过Object.defineProperty()把data中所有属性添加到vm上,

为每一个添加到vm上的属性,都指定一个 getter和setter,

在getter/setter内部去操作data中对应的属性

相关推荐
胡萝卜术2 小时前
滑动窗口最大值:从暴力到单调队列,层层优化全解析
前端·javascript·面试
kyriewen3 小时前
2026 年了,这 6 个 npm 包可以卸载了——浏览器原生 API 已经能替代
前端·javascript·npm
铁皮饭盒4 小时前
bun直接tsx,优雅!
javascript·后端
假如让我当三天老蒯6 小时前
Options API(选项式 API) 和 Composition API(组合式 API)
前端·vue.js·面试
_柳青杨6 小时前
一文吃透 Node.js 事件循环:从原理到 Node 20+ 重大变更
javascript·后端
JieE21216 小时前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
冬奇Lab19 小时前
AI Workflow 定义的四次演进:从 Markdown 到 JS 脚本,再到分布式多 Agent
javascript·人工智能·agent
一颗烂土豆1 天前
Meshopt 压缩深度解析,为什么它比 Draco 更快
前端·javascript·webgl
kyriewen1 天前
同事每天催我 Code Review,我写了个脚本让 AI 替我 review PR——现在他反过来催 AI 了
前端·javascript·ai编程
weedsfly1 天前
迭代器、生成器与异步迭代——让数据“按需流动”的艺术
前端·javascript