原生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 网页水印(非图片水印)实现代码
Mar 01 Javascript
通过jQuery源码学习javascript(二)
Dec 27 Javascript
防止jQuery ajax Load使用缓存的方法小结
Feb 22 Javascript
js中匿名函数的创建与调用方法分析
Dec 19 Javascript
JavaScript继承模式粗探
Jan 12 Javascript
Vue.js系列之项目结构说明(2)
Jan 03 Javascript
angularjs实现的前端分页控件示例
Feb 10 Javascript
jQuery事件详解
Feb 23 Javascript
微信小程序实战之轮播图(3)
Apr 17 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
Oct 31 Javascript
vue路由守卫及路由守卫无限循环问题详析
Sep 05 Javascript
Nest.js 授权验证的方法示例
Feb 22 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中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
PHP实现Javascript中的escape及unescape函数代码分享
2015/02/10 PHP
jQuery EasyUI API 中文文档 - Tree树使用介绍
2011/11/19 Javascript
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
Javascript模块化编程(一)AMD规范(规范使用模块)
2013/01/17 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
详解angular ui-grid之过滤器设置
2017/06/07 Javascript
Vue from-validate 表单验证的示例代码
2017/09/26 Javascript
详解Vue 中 extend 、component 、mixins 、extends 的区别
2017/12/20 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
2018/02/21 Javascript
vue.js 使用axios实现下载功能的示例
2018/03/05 Javascript
JS实现移动端触屏拖拽功能
2018/07/31 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
vue改变对象或数组时的刷新机制的方法总结
2019/04/24 Javascript
基于vue hash模式微信分享#号的解决
2020/09/07 Javascript
[01:20]PWL S2开团时刻第三期——团战可以输 蝙蝠必须死
2020/11/26 DOTA
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
Python之变量类型和if判断方式
2020/05/05 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
使用CSS Grid布局实现网格的流动
2014/12/30 HTML / CSS
详解Html5微信支付爬坑之路
2018/07/24 HTML / CSS
法国发饰品牌:Alexandre De Paris
2018/12/04 全球购物
如何进行Linux分区优化
2016/09/13 面试题
大学生年度自我鉴定
2013/10/31 职场文书
面包店的创业计划书范文
2014/01/16 职场文书
银行反四风对照检查材料
2014/09/29 职场文书
学生不讲诚信检讨书
2014/09/29 职场文书
2015年部门工作总结范文
2015/03/31 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
2015年酒店服务员工作总结
2015/05/18 职场文书
2015年骨干教师工作总结
2015/05/26 职场文书
什么是SOLID
2022/03/24 Javascript
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python