原生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 相关文章推荐
javascript下查找父节点的简单方法
Aug 13 Javascript
JQuery 学习笔记 选择器之二
Jul 23 Javascript
js导出txt示例代码
Jan 14 Javascript
深入分析JSONP跨域的原理
Dec 10 Javascript
在Javascript中处理字符串之big()方法的使用
Jun 08 Javascript
JavaScript中定义类的方式详解
Jan 07 Javascript
jQuery实现的多滑动门,多选项卡效果代码
Mar 28 Javascript
jQuery实现的简单分页示例
Jun 01 Javascript
详解开源的JavaScript插件化框架MinimaJS
Oct 26 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
Jul 20 Javascript
Vue项目打包压缩的实现(让页面更快响应)
Mar 10 Javascript
Vue组件模板及组件互相引用代码实例
Mar 11 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
example2.php
2006/10/09 PHP
PHP随机数生成代码与使用实例分析
2011/04/08 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
php购物车实现方法
2015/01/03 PHP
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
Jquery中的CheckBox、RadioButton、DropDownList的取值赋值实现代码
2011/10/12 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
jquery $(document).ready()和window.onload的区别浅析
2015/02/04 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
2015/07/01 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
2015/09/22 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
2016/02/25 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
2016/05/24 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
JavaScript编程中实现对象封装特性的实例讲解
2016/06/24 Javascript
探讨跨域请求资源的几种方式(总结)
2016/12/02 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
2017/08/03 Javascript
jQuery+CSS实现的table表格行列转置功能示例
2018/01/08 jQuery
JavaScript实现获取两个排序数组的中位数算法示例
2019/02/26 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
JavaScript 作用域实例分析
2019/10/02 Javascript
npm全局环境变量配置详解
2020/12/15 Javascript
Python脚本实现网卡流量监控
2015/02/14 Python
通过Python实现自动填写调查问卷
2017/09/06 Python
python 实现图片旋转 上下左右 180度旋转的示例
2019/01/24 Python
Python中py文件转换成exe可执行文件的方法
2019/06/14 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
2020/02/14 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
美术教师岗位职责
2014/03/18 职场文书
优秀少先队员主要事迹材料
2014/05/28 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
李强感恩观后感
2015/06/17 职场文书
Elasticsearch 配置详解
2022/04/19 Java/Android