奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

JavaScript

Javascript高級技巧

時間:2024-06-07 16:42:01 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高級技巧】相關文章:

商務英語高級閱讀技巧09-12

高級AutoCAD工程師繪圖技巧07-17

如何調試javascript腳本呢07-19

javascript跨域訪問的方法07-19

高級AutoCAD工程師繪圖技巧精選20條07-17

20條高級AutoCAD工程師繪圖技巧07-22

高級催乳師必知技巧有哪些07-29

中學高級教師破解高考英語的答題技巧06-19

社交技巧聊天技巧04-25

成功直銷的溝通技巧演講技巧03-21

主站蜘蛛池模板: 大宁县| 孟州市| 民勤县| 瑞安市| 读书| 正阳县| 永靖县| 长宁区| 东源县| 泰州市| 从化市| 皋兰县| 和平区| 浙江省| 滁州市| 津市市| 贞丰县| 礼泉县| 焉耆| 呼伦贝尔市| 施秉县| 西畴县| 清水县| 长顺县| 华池县| 南木林县| 青龙| 竹北市| 中西区| 项城市| 章丘市| 南陵县| 天台县| 阿鲁科尔沁旗| 昌宁县| 武隆县| 菏泽市| 虹口区| 石屏县| 芜湖市| 西畴县|