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)轻松实现 观察者模式相关推荐

  1. ES6 Proxy 和 Reflect 的理解

    Vue中的数据绑定 ps:观察者模式 (下面有重点) Vue作为前端框架的三驾马车之一,在众多前端项目中具有极其重要的作用. Vue中具有一个重要的功能点--"数据绑定".使用者无 ...

  2. ES6 Proxy和Reflect

    目录 Proxy 概述 基本用法 Proxy 实例方法 1.get(target, propKey, receiver) 2.set(target, propKey, value, receiver) ...

  3. ES6 Proxy和Reflect (上)

    Proxy概述 Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种"元编程"(meta programming),即对编程语言进行编程. Proxy可以理 ...

  4. 深入实践 ES6 Proxy Reflect

    原文: https://zhuanlan.zhihu.com/p/60126477 引言 Vue中的数据绑定 Vue作为前端框架的三驾马车之一,在众多前端项目中具有极其重要的作用. Vue中具有一个重 ...

  5. Proxy和Reflect详解

    Proxy和Reflect详解 之前一直没有理解proxy代理是啥意思,只是感觉很深奥的样子,最近正好在研究vue3的响应式原理,发现vue3是使用proxy完成响应式的,因此仔细的研究了一下prox ...

  6. Proxy和Reflect内容详解

    ES6中的Proxy和Reflect内容详解 监听对象的操作 我们先来看一个需求:有一个对象,我们希望监听这个对象中的属性被设置或获取的过程 通过我们前面所学的知识,能不能做到这一点呢? 其实是可以的 ...

  7. 1.20(Proxy、Reflect、异步任务、同步任务)

    1.20(Proxy.Reflect.异步) 一.代理 概念:比如对一个对象的属性进行读写操作时,代理就是对这个操作执行前的一拦截操作 1.es5代理 let obj1 = {}; let newVa ...

  8. 通过Proxy和Reflect实现vue的响应式原理

    vue3通过Proxy+Reflect实现响应式,vue2通过defineProperty来实现 Proxy Proxy是什么 Proxy是ES6中增加的类,表示代理. 如果我们想要监听对象的操作过程 ...

  9. ES6 Proxy 性能之我见

    ES6 Proxy 性能之我见 本文翻译自https://thecodebarbarian.com/thoughts-on-es6-proxies-performance Proxy是ES6的一个强力 ...

最新文章

  1. 分享一个SQLite 性能优化实例
  2. dbms_rowid包的BUG问题
  3. linux环境变量配置的方法,Linux环境变量配置方法
  4. 【Pygame小游戏】这款经典的炸弹人超能游戏上线,你爱了嘛?(附源码)
  5. nginx虚拟主机解析php文件,window停nginx虚拟主机不能解析php
  6. 【渝粤题库】广东开放大学 跨境电商实务之搜索引擎 形成性考核
  7. C++工作笔记-作用域( :: )的另一种玩法
  8. caffemodel的大小计算
  9. 【java学习之路】(java SE篇)011.线程池
  10. python适合自学编程吗-没编程基础可以学python吗
  11. 6- vue django restful framework 打造生鲜超市 -完成商品列表页(下)
  12. NetApp 数据存储阵列 EF 系列——用于大数据分析和高性能计算
  13. 渗透性测试是一种特殊的信息安全服务
  14. TTTTTTZZZZZZ(系统编程---初识线程,查看线程调用栈的三种方法)10
  15. 未安装360系列应用情况下,Edge浏览器主页被360篡改,一直显示360导航
  16. 卷积法求解系统的零状态响应_因果系统的零状态响应的一种简易计算方法
  17. Python批量处理表格有用吗_python批量读入图片、处理并批量输出(可用于深度学习训练集的制作)...
  18. Java虚拟机JVM简介与理解(三)
  19. 时序预测 | MATLAB实现基于EMD-LSTM时间序列预测(EMD分解结合LSTM长短期记忆神经网络)
  20. 单循环赛贝格尔编排法实现

热门文章

  1. 【OpenCV】正确创建用于保存YUV420P格式的cv::Mat
  2. 【Ubuntu】ubuntu工具 记录shell终端的内容到文件中:script
  3. mutations vuex 调用_Vuex源码学习(六)action和mutation如何被调用的(前置准备篇)...
  4. php导出doc文件_PHP生成Word文档的方法
  5. 计算机鹅点云,CVPR 2020 | 用于点云中3D对象检测的图神经网络
  6. mysql 查询结果转置_转置MySQL查询 – 需要将行放入列中
  7. python正则取字符串日期_python 正则表达式获取字符串中所有的日期和时间
  8. Java学习总结:12
  9. resin php,resin竟然开始支持PHP
  10. WebStorm下ReactNative代码提示设置