原生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 相关文章推荐
关于juqery radio写法的兼容性问题(新老版本jquery)
Jun 14 Javascript
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
Oct 13 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
Jan 16 Javascript
Vue.js每天必学之方法与事件处理器
Sep 06 Javascript
jQuery Ztree行政地区树状展示(点击加载)
Nov 09 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
Dec 15 Javascript
分享一道关于闭包、bind和this的面试题
Feb 20 Javascript
jQuery获取Table某列的值(推荐)
Mar 03 Javascript
Vue框架中正确引入JS库的方法介绍
Jul 30 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
Aug 04 Javascript
史上最为详细的javascript继承(推荐)
May 18 Javascript
JavaScript原型链详解
Nov 07 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
Windows中安装Apache2和PHP4权威指南
2006/11/18 PHP
main.php
2006/12/09 PHP
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
Prototype 工具函数 学习
2009/07/23 Javascript
点击文章内容处弹出页面代码
2009/10/01 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
2014/06/06 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
JS实现的页面自定义滚动条效果
2015/10/26 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
利用angular、react和vue实现相同的面试题组件
2018/02/19 Javascript
对node.js中render和send的用法详解
2018/05/14 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
js实现左右轮播图
2020/01/09 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
[01:44]《为梦想出发》—联想杯DOTA2完美世界全国高校联赛
2015/09/30 DOTA
[03:17]史诗级大片应援2018DOTA2国际邀请赛 致敬每一位坚守遗迹的勇士
2018/07/20 DOTA
Python中每次处理一个字符的5种方法
2015/05/21 Python
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
Python列表推导式与生成器用法分析
2018/08/02 Python
详解Django-restframework 之频率源码分析
2019/02/27 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
Python实现TCP通信的示例代码
2019/09/09 Python
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
英国景点门票网站:attractiontix
2019/08/27 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
环境工程求职简历的自我评价范文
2013/10/24 职场文书
宿舍使用违章电器检讨书
2014/01/12 职场文书
协议书与合同的区别
2014/04/18 职场文书
文案策划专业自荐信
2014/07/07 职场文书
2015年新教师工作总结
2015/04/28 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python