原生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
Nov 25 Javascript
捕获关闭窗口的脚本
Jan 10 Javascript
写出更好的JavaScript程序之undefined篇(中)
Nov 23 Javascript
php上传图片并给图片打上透明水印的代码
Jun 07 Javascript
javascript 从if else 到 switch case 再到抽象
Jul 17 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
Sep 04 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
Aug 19 Javascript
javascript操作ul中li的方法
May 14 Javascript
BootStrap表单验证实例代码
Jan 13 Javascript
jQuery条件分页 代替离线查询(附代码)
Aug 17 jQuery
vue addRoutes实现动态权限路由菜单的示例
May 15 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
Dec 19 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+mysql保存和输出文件
2006/10/09 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
2010/05/10 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
2016/11/09 PHP
php抽象方法和抽象类实例分析
2016/12/07 PHP
Swoole4.4协程抢占式调度器详解
2019/05/23 PHP
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
JQuery对id中含有特殊字符的转义处理示例
2013/09/06 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
JS实现一个列表中包含上移下移删除等功能
2014/09/24 Javascript
jQuery操作JSON的CRUD用法实例
2015/02/25 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
jQuery学习笔记之Ajax用法实例详解
2015/12/01 Javascript
js实现下拉菜单效果
2017/03/01 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
2019/08/12 Javascript
ES6 Object.assign()的用法及其使用
2020/01/18 Javascript
简单总结Python中序列与字典的相同和不同之处
2016/01/19 Python
Python中struct模块对字节流/二进制流的操作教程
2017/01/21 Python
python2.7到3.x迁移指南
2018/02/01 Python
Python静态类型检查新工具之pyright 使用指南
2019/04/26 Python
浅谈Pandas Series 和 Numpy array中的相同点
2019/06/28 Python
python判断自身是否正在运行的方法
2019/08/08 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
Python常用断言函数实例汇总
2020/11/30 Python
python基于opencv实现人脸识别
2021/01/04 Python
电钳专业个人求职信
2014/01/04 职场文书
安全生产汇报材料
2014/02/17 职场文书
签约仪式主持词
2014/03/19 职场文书
硕士生找工作求职信
2014/07/05 职场文书
英文慰问信
2015/02/14 职场文书
检察院起诉书
2015/05/20 职场文书
学校远程教育工作总结
2015/08/11 职场文书
2016年过年放假安排通知
2015/08/18 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang