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 相关文章推荐
csdn 博客中实现运行代码功能实现
Aug 29 Javascript
JSON 编辑器实现代码
Dec 06 Javascript
jQuery Select(单选) 模拟插件 V1.3.62 改进版
Jul 17 Javascript
jquery中this的使用说明
Sep 06 Javascript
让复选框只能选择一项的方法
Oct 08 Javascript
JavaScript数组常用方法
Mar 02 Javascript
JavaScript 七大技巧(一)
Dec 13 Javascript
玩转vue的slot内容分发
Sep 22 Javascript
js字符串处理之绝妙的代码
Apr 05 Javascript
vue框架制作购物车小球动画效果实例代码
Sep 26 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
Jan 18 Javascript
如何在微信小程序中使用骨架屏的步骤
Jun 12 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
JAVA/JSP学习系列之七
2006/10/09 PHP
.htaccess文件保护实例讲解
2011/02/06 PHP
php的4种常见运行方式
2015/03/20 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
PHP实现负载均衡下的session共用功能
2018/04/17 PHP
JQuery 1.4 中的Ajax问题
2010/01/23 Javascript
javascript preload&amp;lazy load
2010/05/13 Javascript
解析瀑布流布局:JS+绝对定位的实现
2013/05/08 Javascript
jquery等宽输出文字插件使用介绍
2013/09/18 Javascript
js中的setInterval和setTimeout使用实例
2014/05/09 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
基于JavaScript实现一个简单的Vue
2018/09/26 Javascript
Javascript类型判断相关例题及解析
2020/08/26 Javascript
用Python实现一个简单的能够发送带附件的邮件程序的教程
2015/04/08 Python
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
Python字符串处理实现单词反转
2017/06/14 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
python实现监控某个服务 服务崩溃即发送邮件报告
2018/06/21 Python
Linux下python制作名片示例
2018/07/20 Python
python去掉 unicode 字符串前面的u方法
2018/10/21 Python
wxPython实现文本框基础组件
2019/11/18 Python
Python如何测试stdout输出
2020/08/10 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
2021/02/26 Python
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
如何选择使用结构还是类
2014/05/30 面试题
建筑个人求职信范文
2014/01/25 职场文书
班组长岗位职责
2014/03/03 职场文书
办理房产证委托书
2014/09/18 职场文书
工伤事故处理协议书怎么写
2014/10/15 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书
2016领导干部廉洁从政心得体会
2016/01/19 职场文书
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android
Python+pyaudio实现音频控制示例详解
2022/07/23 Python