原生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 相关文章推荐
HTML页面滚动时获取离页面顶部的距离2种实现方法
Sep 05 Javascript
用js判断是否为360浏览器的实现代码
Jan 15 Javascript
JavaScript访问字符串中单个字符的两种方法
Jul 03 Javascript
javascript如何写热点图
Dec 08 Javascript
7个jQuery最佳实践
Jan 12 Javascript
jQuery添加删除DOM元素方法详解
Jan 18 Javascript
jQuery实现的简单拖拽功能示例
Sep 13 Javascript
jqueryUI tab标签页代码分享
Oct 09 jQuery
[原创]jQuery实现合并/追加数组并去除重复项的方法
Apr 11 jQuery
详解vue-cli脚手架中webpack配置方法
Aug 22 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
Sep 12 Javascript
js加减乘除精确运算方法实例代码
Jan 17 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 Session变量不能传送到下一页的解决方法
2009/11/27 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
2014/06/09 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
PHP实现链表的定义与反转功能示例
2018/06/09 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
2015/11/17 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
2016/07/07 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
2016/09/27 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
2016/12/19 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
vue-以文件流-blob-的形式-下载-导出文件操作
2020/08/07 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
[49:31]TFT vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python实现读取命令行参数的方法
2015/05/22 Python
python模拟事件触发机制详解
2018/01/19 Python
python os.listdir按文件存取时间顺序列出目录的实例
2018/10/21 Python
python调用opencv实现猫脸检测功能
2019/01/15 Python
详解python使用turtle库来画一朵花
2019/03/21 Python
Python OpenCV实现视频分帧
2019/06/01 Python
Django的models模型的具体使用
2019/07/15 Python
python防止随意修改类属性的实现方法
2019/08/21 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
2019/08/29 Python
tensorflow 获取checkpoint中的变量列表实例
2020/02/11 Python
Python3.9又更新了:dict内置新功能
2020/02/28 Python
如何解决安装python3.6.1失败
2020/07/01 Python
python压包的概念及实例详解
2021/02/17 Python
Html5实现移动端、PC端 刮刮卡效果
2016/06/30 HTML / CSS
Shopee越南:东南亚与台湾电商平台
2019/02/03 全球购物
导游词400字
2015/02/13 职场文书
2016廉洁从业学习心得体会
2016/01/19 职场文书
Java 实现限流器处理Rest接口请求详解流程
2021/11/02 Java/Android
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技