Javascript基于OOP实实现探测器功能代码实例


Posted in Javascript onAugust 26, 2020

代码如下

<script>
/*所有探测器都有探测的方法和分析的方法,分析当前的浏览器环境,不管是浏览器还是nodejs*/
/*container容器探测器*/
/*link链接探测器*/

/*外层用一个立即执行的匿名函数包裹住,防止一些函数声明或者变量泄露到外面*/

!function(global){
  function DetectorBase(configs){//不让外部通过直接调用方式调用,必须使用new,不使用new就会报错
    /*使用new的话,this就是最后要返回的对象,this instanceof DetectorBase应该返回true,不是的话说明没有直接通过new调用*/
    if(!this instanceof DetectorBase){/**/
      throw new Error('Do not invoke without new.');
    }
    this.configs=configs;/*所有的探测器都会有config属性*/
    this.analyze();/*所有的探测器初始化的时候都需要解析一下数据*/

  }

  DetectorBase.prototype.detect=function(){/*代表一个抽象的探测方法,基类不是具体的一个探测器所以实现没有意义,用来说明需要实现这样一个方法*/
    throw new Error('Not implemented');
  }

  DetectorBase.prototype.analyze=function(){
    console.log('analyzing...');
    this.data="###data###";
  }

  /***具体实例***/
  function LinkDetector(links){/*链接探测器,同理必须通过new来构造*/
    DetectorBase.apply(this,arguments);
    if(!this instanceof LinkDetector){
      throw new Error('Do not invoke without new.');
    }
    this.links=links;

  }

  function ContainerDetector(containers){
    DetectorBase.apply(this,arguments);
    if(!this instanceof ContainerDetector){
      throw new Error('Do not invoke without new.');
    }
    this.containers=containers;
  }
  //inherit first
  /*LinkDetector和ContainerDetector都可能挂载一些自己的方法
  需要注意,一定要先实现原型链的继承,再去扩展。
  因为继承的时候要改写LinkDetector的prototype属性*/
  inherit(LinkDetector,DetectorBase);
  inherit(ContainerDetector,DetectorBase);

  //expand later
  LinkDetector.prototype.detect=function(){
    console.log('Loading data:'+this.data);
    console.log('Link detection started.');
    console.log('Scaning links:'+this.links);
  }

  ContainerDetector.prototype.detect=function(){
    console.log('Loading data:'+this.data);
    console.log('Container detection started.');
    console.log('Scaning containers:'+this.containers);
  }

  //prevent from being altered
  /*不希望监控程序被改写,不可删,不可扩展,不可写*/
  Object.freeze(DetectorBase);
  Object.freeze(DetectorBase.prototype);
  Object.freeze(LinkDetector);
  Object.freeze(LinkDetector.prototype);
  Object.freeze(ContainerDetector);
  Object.freeze(ContainerDetector.prototype);



  //export to global object
  /*通过defineProperties一次性把3个类暴露在外面,同时保护它们不可被枚举,不可被删除和改写*/
  Object.defineProperties(global,{
    LinkDetector:{value:LinkDetector},
    ContainerDetector:{value:ContainerDetector},
    DetectorBase:{value:DetectorBase}
  });


  function inherit(subClass,superClass){//
    subClass.prototype=Object.create(superClass.prototype);
    subClass.prototype.constructor=subClass;
  }

}(this);

var cd=new ContainerDetector('#abc #def #ghi');
var ld=new LinkDetector('http://www.taobao.com http://www.tmall.com http://www.baidu.com');
cd.detect();
ld.detect();

</script>

运行结果

Javascript基于OOP实实现探测器功能代码实例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
转一个日期输入控件,支持FF
Apr 27 Javascript
jQuery 中$(this).index与$.each的使用指南
Nov 20 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
Sep 18 Javascript
ES6通过babel转码使用webpack使用import关键字
Dec 13 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
Feb 27 Javascript
JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8
Jun 23 Javascript
Kindeditor单独调用多图上传实例
Jul 31 Javascript
JavaScript中使用参数个数实现重载功能
Sep 01 Javascript
vue学习教程之带你一步步详细解析vue-cli
Dec 26 Javascript
javascript合并两个数组最简单的实现方法
Sep 14 Javascript
Vue双向数据绑定(MVVM)的原理
Oct 03 Javascript
基于p5.js 2D图像接口的扩展(交互实现)
Nov 30 Javascript
Javascript如何实现扩充基本类型
Aug 26 #Javascript
Javascript var变量删除原理及实现
Aug 26 #Javascript
js实现车辆管理系统
Aug 26 #Javascript
js实现飞机大战小游戏
Aug 26 #Javascript
JS面向对象实现飞机大战
Aug 26 #Javascript
JavaScript Image对象实现原理实例解析
Aug 26 #Javascript
js实现飞机大战游戏
Aug 26 #Javascript
You might like
模拟flock实现文件锁定
2007/02/14 PHP
php递归遍历删除文件的方法
2015/04/17 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
Javascript中的数学函数
2007/04/04 Javascript
五段实用的js高级技巧
2011/12/20 Javascript
ECMAScript 创建自己的js类库
2012/11/22 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
一个js控制的导航菜单实例代码
2013/12/03 Javascript
jquery 显示*天*时*分*秒实现时间计时器
2014/05/07 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
nodejs中实现sleep功能实例
2015/03/24 NodeJs
js实现交换运动效果的方法
2015/04/10 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
JQuery解析XML的方法小结
2016/04/02 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
微信小程序实现手势滑动效果
2019/08/26 Javascript
JavaScript基于用户照片姓名生成海报
2020/05/29 Javascript
js实现全选和全不选功能
2020/07/28 Javascript
原生js+css实现tab切换功能
2020/09/17 Javascript
Python2随机数列生成器简单实例
2017/09/04 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
2019/01/29 Python
Python向excel中写入数据的方法
2019/05/05 Python
24式加速你的Python(小结)
2019/06/13 Python
使用python接入微信聊天机器人
2020/03/31 Python
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
美国时尚女装在线:Missguided
2016/12/03 全球购物
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
应届生法律求职信
2013/10/22 职场文书
直接有效的自我评价
2014/01/11 职场文书
环境工程专业自荐信范文
2014/03/18 职场文书
银行先进个人事迹材料
2014/05/11 职场文书
服务行业口号
2014/06/11 职场文书
节能减耗标语
2014/06/21 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
初一语文教学反思
2016/03/03 职场文书
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers