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 相关文章推荐
关于js遍历表格的实例
Jul 10 Javascript
异步动态加载js与css文件的js代码
Sep 15 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
Mar 05 Javascript
遍历js中对象的属性和值的实例
Nov 21 Javascript
微信小程序 textarea 组件详解及简单实例
Jan 10 Javascript
原生js实现倒计时--2018
Feb 21 Javascript
Angularjs使用指令做表单校验的方法
Mar 31 Javascript
JavaScript编写棋盘覆盖代码详解
Aug 28 Javascript
一种angular的方法级的缓存注解(装饰器)
Mar 13 Javascript
JavaScript ES6箭头函数使用指南
Dec 30 Javascript
解决layer 关闭当前弹窗 关闭遮罩层 input值获取不到的问题
Sep 25 Javascript
vue实现输入一位数字转汉字功能
Dec 13 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 intval的测试代码发现问题
2008/07/27 PHP
浅析php工厂模式
2014/11/25 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
jcrop基本参数一览
2013/07/16 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
2015/10/09 Javascript
JS输出空格的简单实现方法
2016/09/08 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
jQuery动态添加与删除tr行实例代码
2016/10/18 Javascript
JavaScript实现的CRC32函数示例
2016/11/23 Javascript
微信小程序 自动登陆PHP源码实例(源码下载)
2017/05/08 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
nodejs后台集成ueditor富文本编辑器的实例
2017/07/11 NodeJs
在原生不支持的旧环境中添加兼容的Object.keys实现方法
2017/09/11 Javascript
详解React Native开源时间日期选择器组件(react-native-datetime)
2017/09/13 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
2017/11/21 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
解决vue build打包之后首页白屏的问题
2018/03/06 Javascript
JavaScript简单实现关键字文本搜索高亮显示功能示例
2018/07/25 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
vue打包npm run build时候界面报错的解决
2020/08/13 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
python动态加载变量示例分享
2014/02/17 Python
零基础写python爬虫之爬虫编写全记录
2014/11/06 Python
Python 矩阵转置的几种方法小结
2019/12/02 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
贝尔帐篷精品店:Bell Tent Boutique
2019/06/12 全球购物
兴趣小组活动总结
2014/05/05 职场文书
新闻编辑专业自荐信
2014/07/02 职场文书
企业员工集体活动方案
2014/08/17 职场文书
水电施工员岗位职责
2015/04/11 职场文书
调解书格式范本
2015/05/20 职场文书
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js