最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript基于OOP實(shí)實(shí)現(xiàn)探測(cè)器功能代碼實(shí)例

 更新時(shí)間:2020年08月26日 11:41:40   作者:starof  
這篇文章主要介紹了Javascript基于OOP實(shí)實(shí)現(xiàn)探測(cè)器功能代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

代碼如下

<script>
/*所有探測(cè)器都有探測(cè)的方法和分析的方法,分析當(dāng)前的瀏覽器環(huán)境,不管是瀏覽器還是nodejs*/
/*container容器探測(cè)器*/
/*link鏈接探測(cè)器*/

/*外層用一個(gè)立即執(zhí)行的匿名函數(shù)包裹住,防止一些函數(shù)聲明或者變量泄露到外面*/

!function(global){
  function DetectorBase(configs){//不讓外部通過直接調(diào)用方式調(diào)用,必須使用new,不使用new就會(huì)報(bào)錯(cuò)
    /*使用new的話,this就是最后要返回的對(duì)象,this instanceof DetectorBase應(yīng)該返回true,不是的話說明沒有直接通過new調(diào)用*/
    if(!this instanceof DetectorBase){/**/
      throw new Error('Do not invoke without new.');
    }
    this.configs=configs;/*所有的探測(cè)器都會(huì)有config屬性*/
    this.analyze();/*所有的探測(cè)器初始化的時(shí)候都需要解析一下數(shù)據(jù)*/

  }

  DetectorBase.prototype.detect=function(){/*代表一個(gè)抽象的探測(cè)方法,基類不是具體的一個(gè)探測(cè)器所以實(shí)現(xiàn)沒有意義,用來說明需要實(shí)現(xiàn)這樣一個(gè)方法*/
    throw new Error('Not implemented');
  }

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

  /***具體實(shí)例***/
  function LinkDetector(links){/*鏈接探測(cè)器,同理必須通過new來構(gòu)造*/
    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都可能掛載一些自己的方法
  需要注意,一定要先實(shí)現(xiàn)原型鏈的繼承,再去擴(kuò)展。
  因?yàn)槔^承的時(shí)候要改寫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
  /*不希望監(jiān)控程序被改寫,不可刪,不可擴(kuò)展,不可寫*/
  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個(gè)類暴露在外面,同時(shí)保護(hù)它們不可被枚舉,不可被刪除和改寫*/
  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>

運(yùn)行結(jié)果

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

北海市| 鸡西市| 崇仁县| 宜丰县| 鄂伦春自治旗| 介休市| 彭山县| 库车县| 曲靖市| 敦煌市| 承德市| 西乌珠穆沁旗| 台湾省| 北宁市| 友谊县| 陵川县| 青阳县| 十堰市| 铜陵市| 大安市| 河北省| 南华县| 会东县| 南陵县| 忻州市| 隆尧县| 金秀| 黄平县| 双桥区| 海盐县| 苏尼特右旗| 巴林右旗| 林芝县| 永春县| 石棉县| 仁布县| 平陆县| 永安市| 寿光市| 镇原县| 于田县|