亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Javascript高級技巧分享

 更新時間:2014年02月25日 14:56:01   作者:  
這篇文章主要介紹了Javascript高級技巧,需要的朋友可以參考下

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

1、類型檢測
使用Object.prototype.toString.call(obj)的方式。
因為無論typeof還是instanceof都無法做到精確判斷變量類型。

2、安全的構造函數(shù)
通常我們定義構造函數(shù)的時候,會使用類似

復制代碼 代碼如下:

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);
      }
}

但是要注意一點,如果其余構造函數(shù)試圖通過Person.call(this,x)這種方式實現(xiàn)繼承的時候。
需要注意,在實例化之前把那個函數(shù)的原型指向到Person去。

3、惰性載入函數(shù)
在調(diào)用函數(shù)時,經(jīng)常會存在一種情況,就是函數(shù)中需要對瀏覽器功能進行判斷。
例如
復制代碼 代碼如下:

function createSomething(){
     if(supportH5){
          //do something
     }else{
          //do otherthing
     }
}

但是,如果一個瀏覽器支持一個功能,那么必然是一直都支持,所以這里面每次執(zhí)行代碼時都去判斷是不必要的,因為判斷一次就夠了。
所以可以改寫成
復制代碼 代碼如下:

function createSomething(){
     if(supportH5){
          createSomething = function(){ //重寫了createSomething 函數(shù)
               //do something
          }
     }else{
          //同上
     }
}

這樣,第一次調(diào)用時會做判斷,之后重寫了這個函數(shù),也就自然不會判斷了。

 
4、函數(shù)綁定
在js中,最搞混的應該就是 this 指向誰的問題。
其實,在我學習js這么久的時間里,發(fā)現(xiàn)一個結論
在函數(shù)中的this會指向最終調(diào)用這個函數(shù)的對象,換句話說就是,哪個對象調(diào)用了這個函數(shù),this就指向那個對象。
搞清楚了這個,函數(shù)綁定就不是問題了。
改變函數(shù)里面this指向的方法就是 call 和 apply,不過用這兩個方法都會執(zhí)行函數(shù)。
如果不想執(zhí)行函數(shù),而是把函數(shù)當參數(shù)傳給某個函數(shù),還想改變this,那么就用最新的bind。

 
5、定時器
setTimeou、setInterval或者Ajax等雖然是異步,像多線程一樣,但是js是單線程的。
其實這些方法并沒有增加一個線程。
setTimeout(fn,300)代表的意思是300毫秒后把fn放入js的執(zhí)行隊列里面。
如果這是隊列里面沒有事務要執(zhí)行(也就是說js解釋器處于空閑狀態(tài)),那么便會立刻執(zhí)行。否則,便會等隊列的事務處理完再執(zhí)行這個函數(shù)。
所以,用setTimeout或者setInterval都不是準確的控制時間。
還有一點要注意的就是,使用setTimeout模擬setInterval可以準確控制最小執(zhí)行時間間隔。

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

 
7、函數(shù)節(jié)流。
函數(shù)節(jié)流是一種提高性能很好的方式,在某些場合可以提高幾倍效率。
比如在做拖動或者是一些發(fā)生在onresize事件中的操作時。
你每操作一下,其實執(zhí)行了很多遍了。例如:
復制代碼 代碼如下:

var i = 0;
window.onresize = function(){
    console.log(i++);
}

嘗試著去拉伸瀏覽器,就會發(fā)現(xiàn)控制臺瞬間顯示i都超過100多了。
改變一下寫法,例如:

復制代碼 代碼如下:

var i = 0, j = 1;
window.onresize = function(){
     if(j % 2 == 0){
         console.log(i++);
     }
     j++;
}

創(chuàng)建一個變量j,讓j每次只有偶數(shù)的時候才執(zhí)行,也就是少了一半的實行次數(shù)。
像這樣處理下,可以減少50%的執(zhí)行次數(shù),但是對用戶來說,并感受不到區(qū)別。

還有一種使用定時器實現(xiàn)的函數(shù)節(jié)流。
核心代碼如下:

復制代碼 代碼如下:

function throttle(method , context){
   clearTimeout(method.tId);
   method.tId = setTimeout(function(){
         method.call(context);
    },100);
}

這里傳入執(zhí)行函數(shù)和函數(shù)的執(zhí)行環(huán)境(也就是執(zhí)行函數(shù)中的this的指向?qū)ο螅缓笙惹宄齽幼麝犃?,接著?zhí)行動作。
這種形式可以對動作頻率做更好的控制。
假設是一個瀏覽器拉伸動作,那么只要你拉伸的速度夠快,每次觸發(fā)的時間間隔在100ms之內(nèi),那么就只會執(zhí)行最后一下的結果。

 
8、自定義事件
本質(zhì)是觀察者模式?;灸J绞切枰?個函數(shù),
一個函數(shù)是綁定事件,一個函數(shù)是觸發(fā)事件,一個是移除綁定。
這種模式可以很大程度降低代碼耦合性。

相關文章

  • js裁剪(分隔)字符串的三種常用方法

    js裁剪(分隔)字符串的三種常用方法

    在開發(fā)中我們經(jīng)常會遇到對于字符串的部分取舍問題,本文主要介紹了js裁剪(分隔)字符串的三種常用方法,今天我們來看看3中常用的方法來解決這個問題,感興趣的可以一起了解一下
    2022-02-02
  • 詳解在JavaScript中如何判斷變量類型

    詳解在JavaScript中如何判斷變量類型

    JavaScript是一個動態(tài)類型語言,在運行時獲取變量類型是常用操作。本文將通過示例為大家詳細講講在JavaScript中如何判斷變量類型,感興趣的可以學習一下
    2022-07-07
  • 原生JS實現(xiàn)前端本地文件上傳

    原生JS實現(xiàn)前端本地文件上傳

    這篇文章主要為大家詳細介紹了原生JS實現(xiàn)前端本地文件上傳,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • extjs圖形繪制之餅圖實現(xiàn)方法分析

    extjs圖形繪制之餅圖實現(xiàn)方法分析

    這篇文章主要介紹了extjs圖形繪制之餅圖實現(xiàn)方法,結合實例形式分析了extjs繪制餅圖的相關實現(xiàn)方法與操作注意事項,需要的朋友可以參考下
    2020-03-03
  • 使用smartupload組件實現(xiàn)jsp+jdbc上傳下載文件實例解析

    使用smartupload組件實現(xiàn)jsp+jdbc上傳下載文件實例解析

    這篇文章主要介紹了使用smartupload組件實現(xiàn)jsp+jdbc上傳下載文件實例解析,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-01-01
  • js控制input輸入字符解析

    js控制input輸入字符解析

    本篇文章主要是對js控制input輸入字符方法進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • JavaScript 提升運行速度之循環(huán)篇 譯文

    JavaScript 提升運行速度之循環(huán)篇 譯文

    根據(jù)Nicholas 的說法,有四種代碼 會拖慢腳本的運行,并最終導致腳本失控。分別是次數(shù)過多的同步循環(huán)、龐大的函數(shù)體、不恰當?shù)倪f歸和不合理的DOM 調(diào)用。
    2009-08-08
  • JS+CSS實現(xiàn)仿新浪微博搜索框的方法

    JS+CSS實現(xiàn)仿新浪微博搜索框的方法

    這篇文章主要介紹了JS+CSS實現(xiàn)仿新浪微博搜索框的方法,實例分析了javascript針對搜索框樣式的控制技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • javascript window.open打開新窗口后無法再次打開該窗口問題的解決方法

    javascript window.open打開新窗口后無法再次打開該窗口問題的解決方法

    這篇文章主要介紹了javascript window.open打開新窗口后無法再次打開該窗口問題的解決方法即無法再次打開窗口、第二次打開不了,需要的朋友可以參考下
    2014-04-04
  • JavaScript代碼復用模式實例分析

    JavaScript代碼復用模式實例分析

    任何編程都提出代碼復用,否則話每次開發(fā)一個新程序或者寫一個新功能都要全新編寫的話,效率太差了,接下來我們將針對代碼復用來進行討論,需要的朋友可以參考下
    2012-12-12

最新評論