欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Javascript基于OOP實實現探測器功能代碼實例

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

代碼如下

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

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

!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
  /*不希望監(jiān)控程序被改寫,不可刪,不可擴展,不可寫*/
  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>

運行結果

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 不間斷循環(huán)滾動效果的實例代碼(必看篇)

    不間斷循環(huán)滾動效果的實例代碼(必看篇)

    下面小編就為大家?guī)硪黄婚g斷循環(huán)滾動效果的實例代碼(必看篇)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • extract-text-webpack-plugin用法詳解

    extract-text-webpack-plugin用法詳解

    這篇文章主要介紹了extract-text-webpack-plugin用法詳解,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • date.parse在IE和FF中的區(qū)別

    date.parse在IE和FF中的區(qū)別

    這個方法是很常用的,比如在驗證輸入日期是否存在時,可以使用它,如果是一個不存在的日期,則其返回值將是NaN,另外如果要比較兩個日期的先后,或是計算兩個日期相差的天數 ,都可以用到。
    2010-07-07
  • electron-builder 的基本使用及electron打包步驟

    electron-builder 的基本使用及electron打包步驟

    electron-builder 作為一個用于 Electron 應用程序打包的工具,需要下載并使用 Electron 運行時來創(chuàng)建可執(zhí)行文件,這篇文章主要介紹了electron-builder 的基本使用,需要的朋友可以參考下
    2023-12-12
  • JS如何通過視頻鏈接獲取視頻時長

    JS如何通過視頻鏈接獲取視頻時長

    這篇文章主要介紹了JS如何通過視頻鏈接獲取視頻時長,這個函數用提供的URL創(chuàng)建一個新的Video元素,并在loadedmetadata事件被觸發(fā)時解析一個帶有視頻持續(xù)時間的Promise,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • 淺談Webpack是如何打包CommonJS的

    淺談Webpack是如何打包CommonJS的

    CommonJS是Node中的一種模塊化規(guī)范,本文主要介紹了Webpack是如何打包CJS的,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • JavaScript實現返回頂部按鈕

    JavaScript實現返回頂部按鈕

    這篇文章主要為大家詳細介紹了JavaScript實現返回頂部按鈕,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • uniapp小程序之配置首頁搜索框功能的實現

    uniapp小程序之配置首頁搜索框功能的實現

    這篇文章主要介紹了uniapp小程序之配置首頁搜索框,我們介紹一下本次開發(fā)使用的是uniapp,本次分享內容的搜索框為禁止輸入搜索框,點擊跳轉專屬搜索頁面,需要的朋友可以參考下
    2022-09-09
  • Bootstarp風格的toggle效果分享

    Bootstarp風格的toggle效果分享

    這篇文章主要介紹了Bootstarp風格的toggle效果分享的相關資料,需要的朋友可以參考下
    2016-02-02
  • Javascript注入技巧

    Javascript注入技巧

    Javascript注入技巧...
    2007-06-06

最新評論