搜尋
首頁web前端js教程Javascript進階技巧分享_javascript技巧

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

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

2、安全的建構子
通常我們定義建構子的時候,會用類似

複製程式碼


程式碼如下:

function Person(name){
  this.name = 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){
      〠){
     
      }else{
          return new Person(name);
     x)這種方式實作繼承的時候。
需要注意,在實例化之前把那個函數的原型指向到Person去。
3、惰性載入函數

在呼叫函數時,常會存在一種情況,就是函數中需要對瀏覽器功能進行判斷。
例如複製程式碼
程式碼如下:


function create create          //do something
     }else{
       🎜>但是,如果一個瀏覽器支援一個功能,那麼必然是一直都支持,所以這裡面每次執行程式碼時都去判斷是不必要的,因為判斷一次就夠了。
所以可以改寫成



複製程式碼
程式碼如下:function createSome      if(supportH5){
          createSomething = function(){ //重寫了createSomething 函數     }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 = 0dow
window onresize = function(){
    console.log(i );
}

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

複製程式碼 程式碼如下:


程式碼如下:


var i = 0, j = 1;
window.onresize = function(){
     if(j % 2 == 0){
       🎜>}


建立一個變數j,讓j每次只有偶數的時候才執行,也就是少了一半的實行次數。
像這樣處理下,可以減少50%的執行次數,但是對使用者來說,並感受不到差異。

還有一種使用定時器實現的函數節流。
核心程式碼如下:

程式碼如下:


function throttle; context){
   clearTimeout(method.tId);
   method.tId = setTimeout(function(){
         method.call(con.); >

這裡傳入執行函數和函數的執行環境(也就是執行函數中的this的指向物件),然後先清除動作佇列,接著執行動作。 這種形式可以對動作頻率做更好的控制。

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

 

8、自訂事件
本質是觀察者模式。基本模式是需要3個函數,
一個函數是綁定事件,一個函數是觸發事​​件,一個是移除綁定。
這種模式可以很大程度上降低程式碼耦合性。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
es6数组怎么去掉重复并且重新排序es6数组怎么去掉重复并且重新排序May 05, 2022 pm 07:08 PM

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

JavaScript的Symbol类型、隐藏属性及全局注册表详解JavaScript的Symbol类型、隐藏属性及全局注册表详解Jun 02, 2022 am 11:50 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

原来利用纯CSS也能实现文字轮播与图片轮播!原来利用纯CSS也能实现文字轮播与图片轮播!Jun 10, 2022 pm 01:00 PM

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

JavaScript对象的构造函数和new操作符(实例详解)JavaScript对象的构造函数和new操作符(实例详解)May 10, 2022 pm 06:16 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

JavaScript面向对象详细解析之属性描述符JavaScript面向对象详细解析之属性描述符May 27, 2022 pm 05:29 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

javascript怎么移除元素点击事件javascript怎么移除元素点击事件Apr 11, 2022 pm 04:51 PM

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

整理总结JavaScript常见的BOM操作整理总结JavaScript常见的BOM操作Jun 01, 2022 am 11:43 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

foreach是es6里的吗foreach是es6里的吗May 05, 2022 pm 05:59 PM

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
1 個月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具