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带搜索框的下拉菜单
May 06 Javascript
页面载入结束自动调用js函数示例
Sep 23 Javascript
不同Jquery版本引发的问题解决
Oct 14 Javascript
js保留小数点后几位的写法
Jan 03 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
Mar 12 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
Aug 27 Javascript
js显示当前日期时间和星期几
Oct 22 Javascript
JS实现HTML表格排序功能
Aug 05 Javascript
Js获取当前日期时间及格式化代码
Sep 17 Javascript
值得分享的bootstrap table实例
Sep 22 Javascript
原生js编写焦点图效果
Dec 08 Javascript
详解vue.js下引入百度地图jsApi的两种方法
Jul 27 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&mysql(二)
2006/10/09 PHP
php 使用array函数实现分页
2015/02/13 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
ie下jquery.getJSON的缓存问题的处理方法
2013/03/29 Javascript
script不刷新页面的联动前后代码
2013/09/18 Javascript
Javascript delete 引用类型对象
2013/11/01 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
JavaScript 模块的循环加载实现方法
2015/12/13 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
详解Javascript数据类型的转换规则
2016/12/12 Javascript
jQuery UI仿淘宝搜索下拉列表功能
2017/01/10 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
微信小程序列表中item左滑删除功能
2018/11/07 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
小程序input数据双向绑定实现方法
2019/10/17 Javascript
Python利用itchat对微信中好友数据实现简单分析的方法
2017/11/21 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
python中利用zfill方法自动给数字前面补0
2018/04/10 Python
python 获取当天凌晨零点的时间戳方法
2018/05/22 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
Python表达式的优先级详解
2020/02/18 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
性能服装:HYLETE
2018/08/14 全球购物
宠物店的创业计划书范文
2014/01/11 职场文书
小学优秀班集体申报材料
2014/05/25 职场文书
数学兴趣小组活动总结
2014/07/08 职场文书
辞职离别感言
2015/08/04 职场文书
python将图片转为矢量图的方法步骤
2021/03/30 Python