javascript观察者模式实现自动刷新效果


Posted in Javascript onSeptember 05, 2017

本文实例为大家分享了js观察者模式实现自动刷新的具体代码,供大家参考,具体内容如下

// author wangbinandi@gmail.com

const observable = obj => {
  const observers = Symbol();
  const set = function(target, key, value) {
    const result = Reflect.set(target, key, value);
    //console.log("set key:" + key);
    if ( target[observers].has(key) ) {
      target[observers].get(key).forEach(observer => observer());
    }

    return result;
  }

  const get = function(target, key) {
    const result = Reflect.get(target, key);
    //console.log("get key:" + key);
    if (arguments.callee.caller) {
      if (!target[observers].has(key)) {
        target[observers].set(key, new Set())
      }
      target[observers].get(key).add(arguments.callee.caller);
    }

    return result;
  }

  obj[observers] = new Map(); // string => Set()
  return new Proxy(obj, {set, get});
};

const autorun = fn => fn();

var person = observable({
  firstName: 'Matt',
  lastName: 'Ruby',
  age: 18,
  weight: 50
});

autorun(function () {
  console.log('autorun.getAge: ' + person.firstName + ' ' + person.age);
});

autorun(function () {
  console.log('autorun.getName: ' + person.firstName + ' ' + person.lastName);
});

person.age = 19;
person.weight = 55;
person.firstName = 'test';
person.lastName = 'MyLast';
console.log(person.lastName);
person.age = 20;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery+css实现图片滚动效果(附源码)
Mar 18 Javascript
jquery实现div阴影效果示例代码
Sep 16 Javascript
Web前端开发工具——bower依赖包管理工具
Mar 29 Javascript
深入理解JS addLoadEvent函数
May 20 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
Jul 28 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
Apr 13 Javascript
VueRouter导航守卫用法详解
Dec 25 Javascript
javascript闭包的使用之按钮切换功能
Aug 30 Javascript
三种Webpack打包方式(小结)
Sep 19 Javascript
javascript简单实现深浅拷贝过程详解
Oct 08 Javascript
Vue父子传递实例讲解
Feb 14 Javascript
Vue实现菜单切换功能
Nov 08 Javascript
js使用generator函数同步执行ajax任务
Sep 05 #Javascript
vue如何使用 Slot 分发内容实例详解
Sep 05 #Javascript
详解Vue2.0 事件派发与接收
Sep 05 #Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
Sep 05 #Javascript
jQuery实现注册会员时密码强度提示信息功能示例
Sep 05 #jQuery
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
Sep 05 #Javascript
详解vue-cli本地环境API代理设置和解决跨域
Sep 05 #Javascript
You might like
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
php集成动态口令认证
2016/07/21 PHP
PHP+Ajax实现的博客文章添加类别功能示例
2018/03/29 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
js实现简单模态窗口,背景灰显
2008/11/14 Javascript
InnerHtml和InnerText的区别分析
2009/03/13 Javascript
javascript中的void运算符语法及使用介绍
2013/03/10 Javascript
javascript贪吃蛇完整版(源码)
2013/12/09 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
easyui Droppable组件实现放置特效
2015/08/19 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
jQuery前端开发35个小技巧
2016/05/24 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
nodeJS删除文件方法示例
2016/12/25 NodeJs
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
webpack vue项目开发环境局域网访问方法
2018/03/20 Javascript
js实现简单掷骰子小游戏
2019/10/24 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
vue下载二进制流图片操作
2020/10/26 Javascript
Python 文件操作技巧(File operation) 实例代码分析
2008/08/11 Python
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
python 把文件中的每一行以数组的元素放入数组中的方法
2018/04/29 Python
python远程连接服务器MySQL数据库
2018/07/02 Python
CentOS7下python3.7.0安装教程
2018/07/30 Python
python实现简单加密解密机制
2019/03/19 Python
python实现静态web服务器
2019/09/03 Python
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
娇韵诗香港官网:Clarins香港
2020/08/13 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
企业演讲稿范文
2013/12/28 职场文书
自我检讨书范文
2015/01/28 职场文书
Django框架中模型的用法
2022/06/10 Python