用es6 (proxy 和 reflect)轻松实现 观察者模式
js中 观察者 之前我们一般通过事件机制完成
ex:
注册监听
Event.listen('changeName', name => console.log(name))
派发事件
Event.trigger('changeName', name )
那么es6中 我们可以通过如下方式
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><p>123345</p> <input type="text" οnclick="test()"> <button οnclick="test()">dianow</button> </body> <script>//添加观察者const queuedObservers = new Set();const observe = fn => queuedObservers.add(fn);//proxy 的set 方法function set(target, key, value, receiver) {const result = Reflect.set(target, key, value, receiver);queuedObservers.forEach(observer => observer());return result;}//创建proxy代理const observable = obj => new Proxy(obj, {set});//被观察的 对象const person = observable({name: '张三',age: 20});function print() {console.log(`${person.name}, ${person.age}`)}function print2() {console.log(`我是二号观察者:${person.name}, ${person.age}`)}//添加观察者 observe(print);observe(print2);person.name = '李四'; </script> </html>
具体参考 http://es6.ruanyifeng.com/#docs/proxy
转载于:https://www.cnblogs.com/WhiteHorseIsNotHorse/p/7016010.html
用es6 (proxy 和 reflect)轻松实现 观察者模式相关推荐
- ES6 Proxy 和 Reflect 的理解
Vue中的数据绑定 ps:观察者模式 (下面有重点) Vue作为前端框架的三驾马车之一,在众多前端项目中具有极其重要的作用. Vue中具有一个重要的功能点--"数据绑定".使用者无 ...
- ES6 Proxy和Reflect
目录 Proxy 概述 基本用法 Proxy 实例方法 1.get(target, propKey, receiver) 2.set(target, propKey, value, receiver) ...
- ES6 Proxy和Reflect (上)
Proxy概述 Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种"元编程"(meta programming),即对编程语言进行编程. Proxy可以理 ...
- 深入实践 ES6 Proxy Reflect
原文: https://zhuanlan.zhihu.com/p/60126477 引言 Vue中的数据绑定 Vue作为前端框架的三驾马车之一,在众多前端项目中具有极其重要的作用. Vue中具有一个重 ...
- Proxy和Reflect详解
Proxy和Reflect详解 之前一直没有理解proxy代理是啥意思,只是感觉很深奥的样子,最近正好在研究vue3的响应式原理,发现vue3是使用proxy完成响应式的,因此仔细的研究了一下prox ...
- Proxy和Reflect内容详解
ES6中的Proxy和Reflect内容详解 监听对象的操作 我们先来看一个需求:有一个对象,我们希望监听这个对象中的属性被设置或获取的过程 通过我们前面所学的知识,能不能做到这一点呢? 其实是可以的 ...
- 1.20(Proxy、Reflect、异步任务、同步任务)
1.20(Proxy.Reflect.异步) 一.代理 概念:比如对一个对象的属性进行读写操作时,代理就是对这个操作执行前的一拦截操作 1.es5代理 let obj1 = {}; let newVa ...
- 通过Proxy和Reflect实现vue的响应式原理
vue3通过Proxy+Reflect实现响应式,vue2通过defineProperty来实现 Proxy Proxy是什么 Proxy是ES6中增加的类,表示代理. 如果我们想要监听对象的操作过程 ...
- ES6 Proxy 性能之我见
ES6 Proxy 性能之我见 本文翻译自https://thecodebarbarian.com/thoughts-on-es6-proxies-performance Proxy是ES6的一个强力 ...
最新文章
- 分享一个SQLite 性能优化实例
- dbms_rowid包的BUG问题
- linux环境变量配置的方法,Linux环境变量配置方法
- 【Pygame小游戏】这款经典的炸弹人超能游戏上线,你爱了嘛?(附源码)
- nginx虚拟主机解析php文件,window停nginx虚拟主机不能解析php
- 【渝粤题库】广东开放大学 跨境电商实务之搜索引擎 形成性考核
- C++工作笔记-作用域( :: )的另一种玩法
- caffemodel的大小计算
- 【java学习之路】(java SE篇)011.线程池
- python适合自学编程吗-没编程基础可以学python吗
- 6- vue django restful framework 打造生鲜超市 -完成商品列表页(下)
- NetApp 数据存储阵列 EF 系列——用于大数据分析和高性能计算
- 渗透性测试是一种特殊的信息安全服务
- TTTTTTZZZZZZ(系统编程---初识线程,查看线程调用栈的三种方法)10
- 未安装360系列应用情况下,Edge浏览器主页被360篡改,一直显示360导航
- 卷积法求解系统的零状态响应_因果系统的零状态响应的一种简易计算方法
- Python批量处理表格有用吗_python批量读入图片、处理并批量输出(可用于深度学习训练集的制作)...
- Java虚拟机JVM简介与理解(三)
- 时序预测 | MATLAB实现基于EMD-LSTM时间序列预测(EMD分解结合LSTM长短期记忆神经网络)
- 单循环赛贝格尔编排法实现
热门文章
- 【OpenCV】正确创建用于保存YUV420P格式的cv::Mat
- 【Ubuntu】ubuntu工具 记录shell终端的内容到文件中:script
- mutations vuex 调用_Vuex源码学习(六)action和mutation如何被调用的(前置准备篇)...
- php导出doc文件_PHP生成Word文档的方法
- 计算机鹅点云,CVPR 2020 | 用于点云中3D对象检测的图神经网络
- mysql 查询结果转置_转置MySQL查询 – 需要将行放入列中
- python正则取字符串日期_python 正则表达式获取字符串中所有的日期和时间
- Java学习总结:12
- resin php,resin竟然开始支持PHP
- WebStorm下ReactNative代码提示设置