博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vue是如何实现双向绑定的?
阅读量:4538 次
发布时间:2019-06-08

本文共 1020 字,大约阅读时间需要 3 分钟。

利用Object.defineProperty劫持对象的访问器,在属性值发生变化时我们可以获取变化,然后根据变化进行后续响应,在vue3.0中通过Proxy代理对象进行类似的操作。

// 这是将要被劫持的对象const data = {  name: '',};function say(name) {  if (name === '古天乐') {    console.log('给大家推荐一款超好玩的游戏');  } else if (name === '我是新数据') {    console.log('戏我演过很多,可游戏我只玩贪玩懒月');  } else {    console.log('来做我的兄弟');  }}// 遍历对象,对其属性值进行劫持Object.keys(data).forEach(function(key) {  Object.defineProperty(data, key, {    enumerable: true,    configurable: true,    get: function() {      console.log('get');    },    set: function(newVal) {      // 当属性值发生变化时我们可以进行额外操作      console.log(`大家好,我系${newVal}`);      say(newVal);    },  });});data.name = '我是新数据';

Proxy与Object.defineProperty的优劣对比?

Proxy的优势如下:

1.Proxy可以直接监听对象而非属性

2.Proxy可以直接监听数组的变化
3.Proxy有多达13种拦截方法,不限于apply、ownKeys、deleteProperty、has等等是Object.defineProperty不具备的
4.Proxy返回的是一个新对象,我们可以只操作新的对象达到目的,而Object.defineProperty只能遍历对象属性直接修改
5.Proxy作为新标准将受到浏览器厂商重点持续的性能优化,也就是传说中的新标准的性能红利

Object.defineProperty的优势如下:

兼容性好,支持IE9

转载于:https://www.cnblogs.com/IT123/p/11284104.html

你可能感兴趣的文章
Linux-慕课网学习笔记-3-1命令格式
查看>>
AJAX入门介绍
查看>>
[算法竞赛入门]第一章_算法概述
查看>>
SQL反模式笔记3——主键规范
查看>>
简单粗暴,微生物生态研究中常用数据库简介--转载
查看>>
Oracle -操作数据库
查看>>
c - 给分数分级别
查看>>
chrome 调试
查看>>
luoguP2774 方格取数问题
查看>>
tcp/ip协议各层的理解与
查看>>
python中的setdefault()方法
查看>>
转 VSFTP用户权限管控
查看>>
poj2420 A Star not a Tree? 模拟退火
查看>>
微信小程序--登录授权,一键获取用户微信手机号并登录
查看>>
[转载] C#面向对象设计模式纵横谈——13. Proxy代理模式
查看>>
JqueryEasyUI浅谈---视频教程公布
查看>>
ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致”...
查看>>
Javaweb之 servlet 开发详解1
查看>>
Restore IP Addresses
查看>>
DWR框架简单应用
查看>>