| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> vue数据代理 -> 正文阅读 |
|
[JavaScript知识库]vue数据代理 |
首先回顾Object.defineProperty(obj, prop, descriptor)方法? ? ? ? ? ? ? ? 解析:Object.defineProperty(添加的对象,'添加的属性名',{添加的配置项}) 范例1:?? Object.defineProperty基本属性<script type="text/javascript"> ? ? ? ? // 创建了一个对象,let声明的是变量,先声明后赋值 ? ? ? ?let person = { ? ? ? ? name:'哈士奇', ? ? ? ? sex:'男' ? ? ? ?}? ? ? 需求:现在需要添加一个元素 ? ? ? ? Object.defineProperty(person, 'age', {? ?? ? ? ? ? ? ? value: 18, ? ? ? ? ? ??enumerable:true, //控制属性是否可以枚举,默认值false ? ? ? ? ? ? writable:true,//控制属性是否可以修改,默认值false ? ? ? ? ? ? configurable:true//控制属性是否可以删除,默认值false ? ? ????????? ?}) ? ? ? ????????? console.log(person); ? ? ?</script> 范例2:Object.defineProperty'高级属性'=>数据代理<script type="text/javascript"> ? ? ? ? // 创建了一个对象,let声明的是变量,先声明后赋值 ? ? ? ? let number = 18 ? ? ? ?let person = { ? ? ? ? name:'哈士奇', ? ? ? ? sex:'男' ? ? ? ?} ? ?需求:现在需要添加一个元素 ? Object.defineProperty(person, 'age', {? ? ? ???//当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值? ? ? ? ? ? ? get(){ ? ? ? ? ? ? ? ? return number ? ? ? ? ? ? }, //当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值 ? ? ? ? ? ? set(value){ ? ? ? ? ? ? ? ? number = value ? ? ? ? ? ? } ? ? ? ? }) ? ? ? ? console.log(person); ? ? ?</script> 何为数据代理????????数据代理:通过一个对象(obj2)代理对另一个对象(obj)中属性的操作(读/写) ? ? ? ? 示范:通过obj2可以调用修改obj.x ? ? ? ? ? ? ? ? ?<script type="text/javascript"> ? ? ? ????????????????????????? let obj = {x:100} ? ? ? ????????????????????????? let obj2 = {y:100} ? ? ? ? ????????????????Object.defineProperty(obj2,'x',{ ? ? ? ? ????????????????? ????????? get(){ ? ? ? ? ? ? ? ????????????????????????????????? return obj.x ? ? ? ? ? ????????????????????????? }, ? ? ? ? ? ????????????????????????? set(value){ ? ? ? ? ? ? ????????????????????????? ????????? obj.x = value ? ? ? ? ????????????????????????? ???????? } ? ? ? ????????????????????????????????}) ? ????????????????</script> 数据代理原理????????????1,vue中数据代理: ? ? ? ? ? ? ? ? 通过vm对象来代理data对象中属性的操作(读、写) ? ? ? ? ? ? 2,vue中数据代理的好处: ? ? ? ? ? ? ? ? 更加方便的操作data中的数据 ? ? ? ? ? ? 3,基本原理: ? ? ? ? ? ? ? ? 通过Object.defineProperty() 把data对象中所有属性添加到vm上 ? ? ? ? ? ? ? ? 为每一个添加到vm的属性都指定一个getter/setter ? ? ? ? ? ? ? ? 在getter、setter内部去操作(读、写)data中对应的属性 范例:? ? ?? <body> ? ? <div id="root"> ? ? ? ? <h1>学校名称:{{ name }} </h1> ? ? ? ? <h2>学校地址:{{ address }} </h2> ? ? </div> </body> <script type="text/javascript"> ? ? ? ?const vm = new Vue({ ? ? ? ? ? ? el:'#root', ? ? ? ? ? ? data:{ ? ? ? ? ? ? ? ? name:'理工', ? ? ? ? ? ? ? ? address:'北京' ? ? ? ? ? ? } ? ? ? ? }) </script> ? ? ? ?解析:如何证明vm._data === data ? ? ? ? ? ? ? ? ? body里面不变 ????????????????将data拿出来就可以啦 <script type="text/javascript"> let data = { ????????????????name:'理工', ? ? ? ? ? ? ? ? address:'北京' } ? ? ? ?const vm = new Vue({ ? ? ? ? ? ? el:'#root', ? ? ? ? ? ? data ? ? ? ? }) </script> 数据代理基本原理示意图: ?_data里面用的不是数据代理,是数据劫持 ? |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 10:59:21- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |