原生javascript实现类似vue的数据绑定功能示例【观察者模式】


Posted in Javascript onFebruary 24, 2020

本文实例讲述了原生javascript实现类似vue的数据绑定功能。分享给大家供大家参考,具体如下:

观察者模式

let observer = {
    /*订阅功能*/
    addSubscriber: function (cb) {
      this.subscribers.push(cb);
    },
    /*退订功能*/
    removerSubscriber: function (cb) {
      let index = this.subscribers.indexOf(cb);
      this.subscribers.splice(index, 1)
    },
    // 发布功能
    publish: function (what) {
      for (let i in this.subscribers) {
        if (typeof this.subscribers[i] == "function") {
          this.subscribers[i](what);
        }
      }
    },
    // 让每个对象具有订阅功能
    make:function(obj){
      for(let key in this){
        obj[key] = this[key];
      }
      obj.subscribers = [];
    },
  }

使用实例

// 定义对象
    let o = {};
    // 实现数据绑定 实现具有发布订阅功能
    observer.make(o);
    // 发布
    $("#num").oninput = function(){
      o.publish(this.value);
    };
    // 平方功能
    o.addSubscriber(function(num){
      $("#sqrnum").value = Math.pow(num,2);
    });
    o.addSubscriber(function(num){
      $("#cubenum").value = Math.pow(num,3);
    });
    o.addSubscriber(function(num){
      $("#fourFangnum").value = Math.pow(num,4);
    });
    o.addSubscriber(function(num){
      $("#sqrtnum").value = Math.sqrt(num);
    });
  }
  function $(str){//#box .cls p
    if(str.charAt(0)=="#"){
      return document.getElementById(str.substring(1));
    }else if(str.charAt(0)=="."){
      return document.getElementsByClassName(str.substring(1));
    }else{
      return document.getElementsByTagName(str);
    }
  }

感兴趣的朋友可以使用在线HTML/CSS/JavaScript前端代码调试运行工具:http://tools.3water.com/code/WebCodeRun测试上述代码运行效果。

更多关于JavaScript相关内容还可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
动态加载js的几种方法
Oct 23 Javascript
JS定义回车事件(实现代码)
Jul 08 Javascript
JS实现简洁、全兼容的拖动层实例
May 13 Javascript
AngularJs解决跨域问题案例详解(简单方法)
May 19 Javascript
Three.js获取鼠标点击的三维坐标示例代码
Mar 24 Javascript
vue中如何实现变量和字符串拼接
Jun 19 Javascript
react 父组件与子组件之间的值传递的方法
Sep 14 Javascript
简单介绍react redux的中间件的使用
Apr 06 Javascript
vue-lazyload使用总结(推荐)
Nov 01 Javascript
JS数组求和的常用方法实例小结
Jan 07 Javascript
Vue v-for循环之@click点击事件获取元素示例
Nov 09 Javascript
Vue双向数据绑定(MVVM)的原理
Oct 03 Javascript
Vue 技巧之控制父类的 slot
Feb 24 #Javascript
原生javascript的ajax请求及后台PHP响应操作示例
Feb 24 #Javascript
在 Vue 中编写 SVG 图标组件的方法
Feb 24 #Javascript
原生javascript中this几种常见用法总结
Feb 24 #Javascript
js实现坦克大战游戏
Feb 24 #Javascript
Vue中点击active并第一个默认选中功能的实现
Feb 24 #Javascript
如何在JavaScript中创建具有多个空格的字符串?
Feb 23 #Javascript
You might like
php简单静态页生成过程
2008/03/27 PHP
PHP学习笔记之二
2011/01/17 PHP
php正则表达式获取内容所有链接
2015/07/24 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
tp5.1 框架数据库高级查询技巧实例总结
2020/05/25 PHP
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
nodejs实现解析xml字符串为对象的方法示例
2018/03/14 NodeJs
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
vue路由前进后退动画效果的实现代码
2018/12/10 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
微信小程序可滑动月日历组件使用详解
2019/10/21 Javascript
详解使用mocha对webpack打包的项目进行"冒烟测试"的大致流程
2020/04/27 Javascript
Javascript Symbol原理及使用方法解析
2020/10/22 Javascript
Python设计模式之单例模式实例
2014/04/26 Python
python 识别图片中的文字信息方法
2018/05/10 Python
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
Django项目中包含多个应用时对url的配置方法
2018/05/30 Python
Python中is和==的区别详解
2018/11/15 Python
对python指数、幂数拟合curve_fit详解
2018/12/29 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
Python爬虫:将headers请求头字符串转为字典的方法
2019/08/21 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
shell程序中如何注释
2012/02/17 面试题
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
高级Java程序员面试题
2016/06/23 面试题
商务邀请函范文
2014/01/14 职场文书
财政局党的群众路线教育实践活动整改方案
2014/09/21 职场文书
《帝国时代4》赛季预告 新增内容编译器可创造地图
2022/04/03 其他游戏
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers
Python 文字识别
2022/05/11 Python