上次整理了Ajax部分,這週看完了高級技巧部分,也整理下吧。
1、型別偵測
使用Object.prototype.toString.call(obj)的方式。
因為無論typeof或instanceof都無法做到精確判斷變數類型。
2、安全的建構子
通常我們定義建構子的時候,會用類似
程式碼如下:
this.name = name;
}
this.name = name;
}
然而
複製程式碼
程式碼如下:
function Person(name){
〠){
}else{
return new Person(name);
x)這種方式實作繼承的時候。
需要注意,在實例化之前把那個函數的原型指向到Person去。
3、惰性載入函數
在呼叫函數時,常會存在一種情況,就是函數中需要對瀏覽器功能進行判斷。
function create create //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 = 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.); >
假設是一個瀏覽器拉伸動作,那麼只要你拉伸的速度夠快,每次觸發的時間間隔在100ms之內,那麼就只會執行最後一下的結果。
8、自訂事件
本質是觀察者模式。基本模式是需要3個函數,
一個函數是綁定事件,一個函數是觸發事件,一個是移除綁定。 這種模式可以很大程度上降低程式碼耦合性。

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

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

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

Atom編輯器mac版下載
最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

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

Dreamweaver Mac版
視覺化網頁開發工具