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

发布时间 - 2026-01-11 03:06:59    点击率:

本文实例为大家分享了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;

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


# js  # 观察者模式  # 自动刷新  # JavaScript观察者模式原理与用法实例详解  # 原生javascript实现类似vue的数据绑定功能示例【观察者模式】  # PHP观察者模式实例分析【对比JS观察者模式】  # JavaScript设计模式之观察者模式实例详解  # JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例  # JS设计模式之观察者模式实现实时改变页面中金额数的方法  # JavaScript原生实现观察者模式的示例  # JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解  # JavaScript观察者模式(publish/subscribe)原理与实现方法  # 深入理解Javascript中的观察者模式  # Javascript设计模式之观察者模式(推荐)  # 学习JavaScript设计模式之观察者模式  # JavaScript观察者模式(经典)  # 怎样用JavaScript实现观察者模式  # 大家分享  # 具体内容  # 大家多多  # function  # target  # key  # observers  # Symbol  # set  # log  # forEach  # observer  # result  # Reflect  # console  # gt  # pre  # class  # brush  # arguments 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  移动端脚本框架Hammer.js  大连网站制作公司哪家好一点,大连买房网站哪个好?  如何确保西部建站助手FTP传输的安全性?  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  高性能网站服务器配置指南:安全稳定与高效建站核心方案  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  英语简历制作免费网站推荐,如何将简历翻译成英文?  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  如何快速使用云服务器搭建个人网站?  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  js实现点击每个li节点,都弹出其文本值及修改  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  如何在万网开始建站?分步指南解析  Laravel如何自定义分页视图?(Pagination示例)  如何在万网利用已有域名快速建站?  Laravel如何实现数据库事务?(DB Facade示例)  如何在腾讯云服务器上快速搭建个人网站?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  C++时间戳转换成日期时间的步骤和示例代码  如何实现javascript表单验证_正则表达式有哪些实用技巧  佛山企业网站制作公司有哪些,沟通100网上服务官网?  Laravel怎么实现验证码(Captcha)功能  如何在Windows 2008云服务器安全搭建网站?  如何在阿里云ECS服务器部署织梦CMS网站?  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  如何快速搭建虚拟主机网站?新手必看指南  Laravel怎么实现模型属性的自动加密  如何快速启动建站代理加盟业务?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  如何选择可靠的免备案建站服务器?  如何快速搭建高效简练网站?  用v-html解决Vue.js渲染中html标签不被解析的问题  如何续费美橙建站之星域名及服务?  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  jquery插件bootstrapValidator表单验证详解  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  Python正则表达式进阶教程_复杂匹配与分组替换解析