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 相关文章推荐
jQuery function的正确书写方法
Aug 02 Javascript
jquery创建表格(自动增加表格)代码分享
Dec 25 Javascript
js中将String转换为number以便比较
Jul 08 Javascript
jQuery中prependTo()方法用法实例
Jan 08 Javascript
PHP+jQuery+Ajax实现多图片上传效果
Mar 14 Javascript
jQuery实现按键盘方向键翻页特效
Mar 18 Javascript
JSONP之我见
Mar 24 Javascript
Vue渲染函数详解
Sep 15 Javascript
使用Angular 6创建各种动画效果的方法
Oct 10 Javascript
ElementUI之Message功能拓展详解
Oct 18 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
May 14 Javascript
jquery实现拖拽小方块效果
Dec 10 jQuery
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
PHPMailer安装方法及简单实例
2008/11/25 PHP
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
php实现文本数据导入SQL SERVER
2015/05/17 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
2016/05/09 PHP
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
如何编写高质量JS代码
2014/12/28 Javascript
jQuery中extend()和fn.extend()方法详解
2015/06/03 Javascript
深入学习JavaScript对象
2015/10/13 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
jquery实现倒计时小应用
2017/09/19 jQuery
微信小程序使用component自定义toast弹窗效果
2018/11/27 Javascript
python实现忽略大小写对字符串列表排序的方法
2014/09/25 Python
Python中处理unchecked未捕获异常实例
2015/01/17 Python
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
python中的变量如何开辟内存
2018/06/26 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
Python爬虫之urllib基础用法教程
2019/10/12 Python
如何理解Python中包的引入
2020/05/29 Python
Python如何截图保存的三种方法(小结)
2020/09/01 Python
linux mint中搜狗输入法导致pycharm卡死的问题
2020/10/28 Python
欧洲顶级的童装奢侈品购物网站:Bambini Fashion(面向全球)
2018/04/24 全球购物
历史专业个人求职信分享
2013/12/20 职场文书
班风学风建设方案
2014/05/06 职场文书
暑期政治学习心得体会
2014/09/02 职场文书
课内比教学心得体会
2014/09/09 职场文书
2015年全国爱耳日活动总结
2015/02/27 职场文书
SQLServer之常用函数总结详解
2021/08/30 SQL Server
第四次工业革命,打工人与机器人的竞争
2022/04/21 数码科技
SQL bool盲注和时间盲注详解
2022/07/23 SQL Server