亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Javascript高級技巧分享

2019-11-20 21:02:53
字體:
來源:轉載
供稿:網友

上次整理了Ajax部分,這周看完了高級技巧部分,也整理下吧。

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、自定義事件
本質是觀察者模式?;灸J绞切枰?個函數,
一個函數是綁定事件,一個函數是觸發事件,一個是移除綁定。
這種模式可以很大程度降低代碼耦合性。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品亚洲va在线va天堂资源站| 亚洲精品乱码久久久久久按摩观| xxxx性欧美| 久久激情视频免费观看| 国产精品v片在线观看不卡| 日韩激情在线视频| 97国产在线视频| 美女久久久久久久| 成人福利视频在线观看| 色噜噜国产精品视频一区二区| 欧美性猛交xxxx黑人| 欧美极品在线播放| 久热在线中文字幕色999舞| 乱亲女秽乱长久久久| 久久视频免费在线播放| 欧美日韩国产中文精品字幕自在自线| 欧美激情久久久久久| 国产一区二区日韩| 韩国美女主播一区| 亚洲自拍欧美另类| 福利视频第一区| 亚洲国产精品高清久久久| 国产成人a亚洲精品| 亚洲成在人线av| 亚洲аv电影天堂网| 国产精品青草久久久久福利99| 国产精品自产拍在线观看| 日韩视频免费在线| 日韩精品999| 欧美一区二区三区图| 欧美第一淫aaasss性| 亚洲精品网站在线播放gif| 精品中文字幕乱| 日韩在线观看免费| 久久精品国产2020观看福利| 亚洲性线免费观看视频成熟| 欧美午夜精品伦理| 欧美午夜www高清视频| 欧美视频二区36p| 日韩视频免费在线| 国产精品日韩欧美综合| 国产亚洲精品美女久久久久| 久久精品久久精品亚洲人| 日韩美女av在线免费观看| 亚洲欧美日韩一区在线| 美女福利视频一区| 日韩在线国产精品| 98午夜经典影视| 日韩成人激情在线| 91视频免费在线| 97精品国产97久久久久久春色| 久久久在线免费观看| 中文字幕v亚洲ⅴv天堂| 欧美日韩中文字幕日韩欧美| 夜色77av精品影院| 午夜精品一区二区三区在线视频| 亚洲片国产一区一级在线观看| 日韩中文字幕精品| 国产精品国产自产拍高清av水多| 国产欧美精品一区二区| 日韩专区在线播放| 成人高清视频观看www| 欧美一级大片视频| 日韩a**站在线观看| 最近2019年手机中文字幕| 日本高清不卡的在线| 亚洲最大的成人网| 欧美插天视频在线播放| 国产精品扒开腿做爽爽爽男男| 国产婷婷色综合av蜜臀av| 亚洲国产毛片完整版| 欧美成人免费一级人片100| 久久国产精品免费视频| 国内外成人免费激情在线视频网站| 国产成人极品视频| 欧美资源在线观看| 午夜精品三级视频福利| 亚洲www在线| 欧美一区二粉嫩精品国产一线天| 日韩中文字幕第一页| 国产精品扒开腿做爽爽爽的视频| 国产精品久久久久久久天堂| 日韩专区在线播放| 亚洲天堂影视av| 久久久久久久久久国产| 俺去亚洲欧洲欧美日韩| 国产成人精品久久亚洲高清不卡| 久久久在线观看| 中文字幕亚洲一区二区三区五十路| 亚洲伊人一本大道中文字幕| 78m国产成人精品视频| 国产精品视频一区二区三区四| 欧美激情视频给我| 国产69精品久久久| 久久影院中文字幕| 国产精品亚洲视频在线观看| 欧美激情亚洲精品| 亚洲国产高清福利视频| 久久久久久成人| 国产97在线播放| 日韩精品在线观看网站| 亚洲国产成人精品电影| 亚洲精品国产品国语在线| 亚洲乱亚洲乱妇无码| 亚洲精品一区二区三区婷婷月| 久久久精品亚洲| 亚洲а∨天堂久久精品9966| 欧美黄色片视频| 国产视频在线一区二区| 一本色道久久综合狠狠躁篇的优点| 国产欧美一区二区三区视频| 欧美电影在线观看完整版| 欧美激情手机在线视频| 成人福利在线观看| 国产精品成人久久久久| 色偷偷偷综合中文字幕;dd| 亚洲成av人影院在线观看| 日本精品性网站在线观看| 日韩视频精品在线| 欧美午夜宅男影院在线观看| 亚洲大尺度美女在线| 国产精品欧美亚洲777777| 久久视频在线播放| 国产专区欧美专区| 国产日韩av在线| 欧美夫妻性生活xx| 中文字幕自拍vr一区二区三区| 精品亚洲aⅴ在线观看| 精品性高朝久久久久久久| www.亚洲人.com| 久久久在线免费观看| 成人字幕网zmw| 欧美精品九九久久| 亚洲jizzjizz日本少妇| 伦理中文字幕亚洲| 久久人人爽人人爽人人片av高请| 欧美精品第一页在线播放| 国产欧美精品在线播放| 亚洲韩国日本中文字幕| 性色av一区二区三区在线观看| 国产999在线观看| 性日韩欧美在线视频| 岛国视频午夜一区免费在线观看| 国产精品久久久久久久久影视| 亚洲91精品在线| 成人黄色生活片| 91免费视频网站| www日韩中文字幕在线看| 国产精品久久久久久婷婷天堂| 激情亚洲一区二区三区四区| 午夜精品福利视频| 日韩成人在线视频网站| 亚洲va国产va天堂va久久| 5566日本婷婷色中文字幕97| 91爱视频在线| 亚洲一级一级97网| 国产精品日韩久久久久| 国产大片精品免费永久看nba| 91中文字幕一区| 青青草成人在线| 国产精品流白浆视频| 久久久精品电影| 九九热精品视频国产| 国产免费一区二区三区在线能观看|