没有合适的资源?快使用搜索试试~ 我知道了~
vue3.0响应式原理(超详细)
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
3 下载量 52 浏览量
2021-03-03
11:43:52
上传
评论 1
收藏 697KB PDF 举报
温馨提示
Proxy对象用于定义基本操作的自定义行为(如属性查找、赋值、枚举、函数调用等)。proxy是es6新特性,为了对目标的作用主要是通过handler对象中的拦截方法拦截目标对象target的某些行为(如属性查找、赋值、枚举、函数调用等)。>3.0将带来一个基于Proxy的observer实现,它可以提供覆盖语言(JavaScript——译注)全范围的响应式能力,消除了当前Vue2系列中基于Object.defineProperty所存在的一些局限,这些局限包括:1对属性的添加、删除动作的监测;2对数组基于下标的修改、对于.length修改的监测;3对Map、Set、WeakMap和WeakSe
资源推荐
资源详情
资源评论





























vue3.0响应式原理响应式原理(超详细超详细)
一 基于proxy的Observer
1 什么是proxy
Proxy 对象用于定义基本操作的自定义行为(如属性查找、赋值、枚举、函数调用等)。
proxy是es6新特性,为了对目标的作用主要是通过handler对象中的拦截方法拦截目标对象target的某些行为(如属性查找、赋
值、枚举、函数调用等)。
2 为什么要用proxy,改用proxy之后的利与弊
> 3.0 将带来一个基于 Proxy 的 observer 实现,它可以提供覆盖语言 (JavaScript——译注) 全范围的响应式能力,消除了当前
Vue 2 系列中基于 Object.defineProperty 所存在的一些局限,这些局限包括:1 对属性的添加、删除动作的监测; 2 对数组基
于下标的修改、对于 .length 修改的监测; 3 对 Map、Set、WeakMap 和 WeakSet 的支持;;
vue2.0 用Object.defineProperty 作为响应式原理的实现,但是会有它的局限性,比如 无法监听数组基于下标的修改,不支持
Map、Set、WeakMap 和 WeakSet等缺陷 ,所以改用了proxy解决了这些问题,这也意味着vue3.0将放弃对低版本浏览器的
兼容(兼容版本ie11以上)。
3 proxy中hander对象的基本用法
vue3.0 响应式用到的捕获器(接下来会重点介绍)
handler.has() -> in 操作符的捕捉器。 (vue3.0 用到)
handler.get() -> 属性读取 操作的捕捉器。 (vue3.0 用到)
handler.set() -> 属性设置 操作的捕捉器。(vue3.0 用到)
handler.deleteProperty() -> delete 操作符 的捕捉器(vue3.0 用到)
handler.ownKeys() -> Object.getOwnPropertyNames 方法和 Object.getOwnPropertySymbols 方法的捕捉器。(vue3.0 用
到)。
vue3.0 响应式没用到的捕获器(有兴趣的同学可以研究一下)
handler.getPrototypeOf() -> Object.getPrototypeOf 方法的捕捉器。
handler.setPrototypeOf() -> Object.setPrototypeOf方法的捕捉器。
handler.isExtensible() -> Object.isExtensible 方法的捕捉器。
handler.preventExtensions() -> Object.preventExtensions 方法的捕捉器。
handler.getOwnPropertyDescriptor()-> Object.getOwnPropertyDescriptor 方法的捕捉器。
handler.defineProperty() -> Object.defineProperty方法的捕捉器。
handler.apply() -> 函数调用操作 的捕捉器。
handler.construct() -> new 操作符 的捕捉器。
① has捕获器
has(target, propKey)
target:目标对象
propKey:待拦截属性名
作用: 拦截判断target对象是否含有属性propKey的操作
拦截操作:propKey in proxy 不包含for...in循环
对应Reflect: Reflect.has(target, propKey)
例子:

② get捕获器
get(target, propKey, receiver)
target:目标对象
propKey:待拦截属性名
receiver: proxy实例
返回: 返回读取的属性
作用:拦截对象属性的读取
拦截操作:proxy[propKey]或者点运算符
对应Reflect: Reflect.get(target, propertyKey[, receiver])
例子:
特殊情况
③ set捕获器
set(target,propKey, value,receiver)
target:目标对象
propKey:待拦截属性名
value:新设置的属性值
receiver: proxy实例
返回:严格模式下返回true操作成功;否则失败,报错
作用: 拦截对象的属性赋值操作
拦截操作: proxy[propkey] = value
对应Reflect: Reflect.set(obj, prop, value, receiver)
当对象的属性writable为false时,该属性不能在拦截器中被修改
④ deleteProperty 捕获器
deleteProperty(target, propKey)
target:目标对象
propKey:待拦截属性名
返回:严格模式下只有返回true, 否则报错
作用: 拦截删除target对象的propKey属性的操作
拦截操作: delete proxy[propKey]
对应Reflect: Reflect.delete(obj, prop)
特殊情况: 属性是不可配置属性时,不能删除
⑤ownKeys 捕获器
ownKeys(target)
target:目标对象
返回: 数组(数组元素必须是字符或者Symbol,其他类型报错)
作用: 拦截获取键值的操作
拦截操作:
剩余10页未读,继续阅读
资源评论


weixin_38621630
- 粉丝: 3
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 就业为导向的中职计算机教学模式研究.docx
- 工业控制网络课程教学大纲.doc
- 图书馆管理系统软件工程.doc
- 通信工程安全生产事故应急预案.doc
- 计算机软件数据接口的应用.docx
- ATS单片机数字温度测量及显示系统设计.doc
- 某公司项目管理知识分析培训.pptx
- 计本班《c++课程设计报告》学生信息管理系统程张磊.doc
- 基于隐式马尔可夫模型与正向最大化匹配算法构建的中文分词系统 基于正向最大化匹配与隐式马尔可夫模型研发的中文分词处理系统 融合隐式马尔可夫模型和正向最大化匹配技术的中文分词系统 采用隐式马尔可夫模型及正
- 旋转编码器可以通过PLC控制伺服电机.doc
- 基于 LangChain 大模型开发框架集成 LangGraph 构建可扩展的 RAG 工作流架构
- 智慧城市雪亮工程-综合运维运营设计方案.docx
- Based on the large model development framework of langchain, LangGraph is integrated to create a sca
- 基于jsp学生信息管理系统的方案设计书与实现.doc
- 物联网体系结构及发展研究.docx
- 智慧农业时代大数据的发展态势研究.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
