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 相关文章推荐
Ext grid 添加右击菜单
Nov 26 Javascript
jQuery控制输入框只能输入数值的小例子
Mar 20 Javascript
将文本输入框内容加入表中的js代码
Aug 18 Javascript
往光标所在位置插入值的js代码
Sep 22 Javascript
浅谈JavaScript function函数种类
Dec 29 Javascript
javascript实现确定和取消提示框效果
Jul 10 Javascript
jquery ajax局部加载方法详解(实现代码)
May 12 Javascript
用js实现放大镜的效果的简单实例
May 23 Javascript
Angular4如何自定义首屏的加载动画详解
Jul 26 Javascript
JS中的回调函数实例浅析
Mar 21 Javascript
微信小程序如何实现精确的日期时间选择器
Jan 21 Javascript
解决vue-router路由拦截造成死循环问题
Aug 05 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 Ajax实现页面无刷新发表评论
2007/01/02 PHP
php+mysql写的简单留言本实例代码
2008/07/25 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
ECMAScript 基础知识
2007/06/29 Javascript
javascript中获取下个月一号,是星期几
2012/06/01 Javascript
javascript实现阻止iOS APP中的链接打开Safari浏览器
2014/06/12 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
使用 JavaScript 进行函数式编程 (一) 翻译
2015/10/02 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
Vue实现动态响应数据变化
2017/04/28 Javascript
vuejs 单文件组件.vue 文件的使用
2017/07/28 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
微信小程序蓝牙连接小票打印机实例代码详解
2019/06/03 Javascript
Vue Router的手写实现方法实现
2020/03/02 Javascript
Python之eval()函数危险性浅析
2014/07/03 Python
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
2018/02/08 Python
Python二进制串转换为通用字符串的方法
2018/07/23 Python
基于python实现简单日历
2018/07/28 Python
对Python 语音识别框架详解
2018/12/24 Python
Python算法中的时间复杂度问题
2019/11/19 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
美的官方商城:Midea
2016/09/14 全球购物
什么是规则表达式
2012/05/03 面试题
Java程序员面试题
2013/07/15 面试题
演讲稿怎么写才完美
2014/01/02 职场文书
工程专业求职自荐书范文
2014/02/08 职场文书
档案保密承诺书
2014/06/03 职场文书
体育比赛口号
2014/06/09 职场文书
童年读书笔记
2015/06/26 职场文书
公司规章制度范本
2015/08/03 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
Java 关于String字符串原理上的问题
2022/04/07 Java/Android