IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:02:48  更:2022-09-04 01:05:39 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码