<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • Javascript高級技巧

    時間:2024-11-05 04:18:06 JavaScript 我要投稿
    • 相關推薦

    Javascript高級技巧匯總

    Javascript高級技巧匯總

      1、類型檢測

      使用Object.prototype.toString.call(obj)的方式。

      因為無論typeof還是instanceof都無法做到精確判斷變量類型。

      2、安全的構造函數

      通常我們定義構造函數的時候,會使用類似

      復制代碼 代碼如下:

      function Person(name){

      this.name = name;

      }

      然而之后如果不是去 var person = new Person("cnblogs")。

      而是 var person = Person("cnblogs")。那么this就會指向別處,導致污染其余對象。

      解決方法就是在設置this.property的時候判斷

      this instanceof Person

      如果不是,則new Person(x,x,x);

      復制代碼 代碼如下:

      function Person(name){

      if(this instanceof Person){

      this.name = name;

      }else{

      return new Person(name);

      }

      }

      但是要注意一點,如果其余構造函數試圖通過Person.call(this,x)這種方式實現繼承的時候。

      需要注意,在實例化之前把那個函數的原型指向到Person去。

      3、惰性載入函數

      在調用函數時,經常會存在一種情況,就是函數中需要對瀏覽器功能進行判斷。

      例如

      復制代碼 代碼如下:

      function createSomething(){

      if(supportH5){

      //do something

      }else{

      //do otherthing

      }

      }

      但是,如果一個瀏覽器支持一個功能,那么必然是一直都支持,所以這里面每次執行代碼時都去判斷是不必要的,因為判斷一次就夠了。

      所以可以改寫成

      復制代碼 代碼如下:

      function createSomething(){

      if(supportH5){

      createSomething = function(){ //重寫了createSomething 函數

      //do something

      }

      }else{

      //同上

      }

      }

      這樣,第一次調用時會做判斷,之后重寫了這個函數,也就自然不會判斷了。

      4、函數綁定

      在js中,最搞混的應該就是 this 指向誰的問題。

      其實,在我學習js這么久的時間里,發現一個結論

      在函數中的this會指向最終調用這個函數的對象,換句話說就是,哪個對象調用了這個函數,this就指向那個對象。

      搞清楚了這個,函數綁定就不是問題了。

      改變函數里面this指向的方法就是 call 和 apply,不過用這兩個方法都會執行函數。

      如果不想執行函數,而是把函數當參數傳給某個函數,還想改變this,那么就用最新的bind。

      5、定時器

      setTimeou、setInterval或者Ajax等雖然是異步,像多線程一樣,但是js是單線程的。

      其實這些方法并沒有增加一個線程。

      setTimeout(fn,300)代表的意思是300毫秒后把fn放入js的執行隊列里面。

      如果這是隊列里面沒有事務要執行(也就是說js解釋器處于空閑狀態),那么便會立刻執行。否則,便會等隊列的'事務處理完再執行這個函數。

      所以,用setTimeout或者setInterval都不是準確的控制時間。

      還有一點要注意的就是,使用setTimeout模擬setInterval可以準確控制最小執行時間間隔。

      6、使用定時器固定時間執行方法。

      如果一個方法要執行很久,也許造成瀏覽器短時間沒響應,那么可以用定時器固定每段時間執行一部分。這樣可以不至于讓js一直處于忙碌狀態(瀏覽器無響應),有空閑的時間處理其余事務。比如有一個1000長度數組循環,那么可以100每次的執行,中間隔點時間讓js處于空閑去做別的操作。

      7、函數節流。

      函數節流是一種提高性能很好的方式,在某些場合可以提高幾倍效率。

      比如在做拖動或者是一些發生在onresize事件中的操作時。

      你每操作一下,其實執行了很多遍了。例如:

      復制代碼 代碼如下:

      var i = 0;

      window.onresize = function(){

      console.log(i++);

      }

      嘗試著去拉伸瀏覽器,就會發現控制臺瞬間顯示i都超過100多了。

      改變一下寫法,例如:

      復制代碼 代碼如下:

      var i = 0, j = 1;

      window.onresize = function(){

      if(j % 2 == 0){

      console.log(i++);

      }

      j++;

      }

      創建一個變量j,讓j每次只有偶數的時候才執行,也就是少了一半的實行次數。

      像這樣處理下,可以減少50%的執行次數,但是對用戶來說,并感受不到區別。

      還有一種使用定時器實現的函數節流。

      核心代碼如下:

      復制代碼 代碼如下:

      function throttle(method , context){

      clearTimeout(method.tId);

      method.tId = setTimeout(function(){

      method.call(context);

      },100);

      }

      這里傳入執行函數和函數的執行環境(也就是執行函數中的this的指向對象),然后先清除動作隊列,接著執行動作。

      這種形式可以對動作頻率做更好的控制。

      假設是一個瀏覽器拉伸動作,那么只要你拉伸的速度夠快,每次觸發的時間間隔在100ms之內,那么就只會執行最后一下的結果。

      8、自定義事件

      本質是觀察者模式。基本模式是需要3個函數,

      一個函數是綁定事件,一個函數是觸發事件,一個是移除綁定。

      這種模式可以很大程度降低代碼耦合性。

      

    【Javascript高級技巧】相關文章:

    高效編寫JavaScript代碼的技巧08-25

    javascript中for/in循環以及常見的使用技巧06-24

    JavaScript高級程序設計:本地對象Array10-22

    掌握高級的英語表達技巧10-31

    Word使用高級技巧大全07-19

    高級英語寫作技巧01-05

    高級文秘的實用技巧08-07

    韓語高級備考規劃及技巧07-20

    羽毛球高級技巧09-22

    國際象棋高級技巧08-31

    主站蜘蛛池模板: 91精品日韩人妻无码久久不卡| 久久亚洲中文字幕精品一区 | 久久久免费精品re6| 99久久免费国产精品| 亚洲情侣偷拍精品| 国产精品.XX视频.XXTV| 国产精品看高国产精品不卡| 真实国产乱子伦精品一区二区三区| 国产精品99久久久久久www| 国产精品免费福利久久| 欧美人与动牲交a欧美精品| 66精品综合久久久久久久| 久久精品一本到99热免费| 一本大道无码日韩精品影视| 精品无码国产自产拍在线观看蜜| 久久91精品国产91久久户| 国产精品免费无遮挡无码永久视频| 无码精品久久久天天影视| 亚洲欧美日韩国产精品一区二区| 国内精品99亚洲免费高清| 国产精品狼人久久久久影院 | 亚洲国产精品va在线播放| 久久久久人妻精品一区三寸蜜桃| 国产精品成人无码久久久久久 | 日本一区二区三区精品国产| 国产精品第一页在线| 亚洲精品国产va在线观看蜜芽| 精品综合久久久久久888蜜芽| 一本色道久久88综合日韩精品| 人妻少妇精品久久| 免费看污污的网站欧美国产精品不卡在线观看 | 国产精品亚洲精品| 2021最新国产精品网站| 国产精品福利自产拍在线观看| 国产精品内射后入合集| 久久精品国产亚洲av日韩| 久久66热人妻偷产精品9| 国产成人精品无码片区在线观看| 国产精品视频一区二区噜噜 | 久久久久无码精品| 亚洲精品高清在线|