原生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 相关文章推荐
jquery动态增加删除表格行的小例子
Nov 14 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
Jan 10 Javascript
javascript实现存储hmtl字符串示例
Apr 25 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
Jun 15 Javascript
jquery中map函数与each函数的区别实例介绍
Jun 23 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
Mar 04 Javascript
js获取字符串字节数方法小结
Jun 09 Javascript
深入理解bootstrap框架之入门准备
Oct 09 Javascript
Vue filter介绍及其使用详解
Oct 21 Javascript
微信小程序云开发之新手环境配置
May 16 Javascript
如何使用Javascript中的this关键字
May 28 Javascript
JavaScript实现切换多张图片
Jan 27 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
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
2016/01/08 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
jQuery UI-Draggable 参数集合
2010/01/10 Javascript
非常棒的10款jQuery 幻灯片插件
2011/06/14 Javascript
JS实现网页背景颜色与select框中颜色同时变化的方法
2015/02/27 Javascript
手机端页面rem宽度自适应脚本
2015/05/20 Javascript
JavaScript获取数组最小值和最大值的方法
2015/06/09 Javascript
Jquery实现$.fn.extend和$.extend函数
2016/04/14 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
原生js实现节日时间倒计时功能
2017/01/18 Javascript
老生常谈javascript中逻辑运算符&&和||的返回值问题
2017/04/13 Javascript
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
2017/09/18 NodeJs
JS使用贪心算法解决找零问题示例
2017/11/27 Javascript
Vue多环境代理配置方法思路详解
2019/06/21 Javascript
JavaScript实现简单的图片切换功能(实例代码)
2020/04/10 Javascript
关于vue 项目中浏览器跨域的配置问题
2020/11/10 Javascript
Python解析树及树的遍历
2016/02/03 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
python画图常规设置方式
2020/03/05 Python
关于python 跨域处理方式详解
2020/03/28 Python
在tensorflow以及keras安装目录查询操作(windows下)
2020/06/19 Python
PyQt5结合matplotlib绘图的实现示例
2020/09/15 Python
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
校园环保标语
2014/06/13 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
2014年街道办事处工作总结
2014/12/11 职场文书
工作保证书怎么写
2015/02/28 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
外出听课学习心得体会
2016/01/15 职场文书
PHP判断是否是json字符串
2021/04/01 PHP
世界十大动漫制作公司排行榜,迪士尼上榜,第二是美国代表性文化符
2022/03/18 欧美动漫
游戏《我的世界》澄清Xbox版暂无计划加入光追
2022/04/03 其他游戏