1.Object.pototype.toString.call(value)可用于進(jìn)行安全的類型檢測。
2.避免因【調(diào)用構(gòu)造函數(shù)時沒有使用new操作符】導(dǎo)致全局變量屬性受污染的方法是,使用作用域安全的構(gòu)造函數(shù)。
3.惰性載入函數(shù)。第一種方法是在第一次調(diào)用的過程中,根據(jù)不同分支將該函數(shù)覆蓋為另一個合適的函數(shù)。第二種方法是創(chuàng)建一個匿名、自執(zhí)行的函數(shù),每個分支返回正確的函數(shù)。
4.函數(shù)柯里化的概念很簡單:只傳遞給函數(shù)一部分參數(shù)來調(diào)用它,讓它返回一個函數(shù)去處理剩下的參數(shù)。
5.不可擴(kuò)展對象:Object.preventExtensions(object)用于禁止給對象添加新的屬性和方法。
6.密封對象:密封對象是指不可拓展,且已有屬性的[[Configurable]]特性被設(shè)置為false的對象。這也意味著不能刪除已有屬性和方法。要密封對象,可以使用Object.seal(object)方法。
7.凍結(jié)對象:在密封對象的基礎(chǔ)上,已有屬性的[[Writable]]特性會被設(shè)置為false(如果定義了[[set]]函數(shù),則訪問器屬性仍然是可寫的)。要凍結(jié)對象,可以使用Object.freeze(object)方法。
8.為了避免setInterval()導(dǎo)致的**某些間隔被跳過、多個定時器的代碼執(zhí)行之間的間隔可能比預(yù)期的小**這兩個問題,可以用如下模式使用setTimeout()鏈?zhǔn)秸{(diào)用:
~~~
setTimeout(function(){
//處理中
setTimeout(arguments.callee,interval);
}),interval);
~~~
9.為了避免進(jìn)行大量循環(huán)處理造成的腳本長時間運行,可以使用定時器分割這個循環(huán),這是一種叫數(shù)組分塊的技術(shù)。要實現(xiàn)數(shù)組分塊非常簡單,可以使用以下函數(shù):
~~~
function chunk(array,process,context){
setTimeout(funciton(){
var item = array.shift();
process.call(context,item);
if (array.length>0){
setTimeout(arguments.callee,100);
}
},100);
}
~~~
10.通過『函數(shù)節(jié)流』技術(shù)可以阻止某些代碼在沒有間斷的情況下連續(xù)重復(fù)執(zhí)行,從而達(dá)到節(jié)省性能的效果。函數(shù)節(jié)流可以使用以下的throttle()函數(shù)實現(xiàn):
~~~
function throttle(method, context) {
clearTimeout(method.tID);
method.tID = setTimeout(function(){
method.call(context);
},100)
}
~~~
11.自定義事件背后的概念是創(chuàng)建一個事件管理對象,讓其他對象監(jiān)聽那些事件。自定義事件實質(zhì)是將DOM對象的事件處理機制應(yīng)用到非DOM對象中。自定義事件的主要作用是當(dāng)代碼存在多個部分在特定時刻相互交互的情況下,實現(xiàn)解耦。
- 第一章 JavaScript簡介
- 第二章 在HTML中使用JavaScript
- 第三章 基本概念
- 第四章 變量、作用域和內(nèi)存問題
- 第五章 引用類型
- 第六章 面向?qū)ο蟮某绦蛟O(shè)計
- 第七章 函數(shù)表達(dá)式
- 第八章 BOM
- 第九章 客戶端檢測
- 第十章 DOM
- 第十一章 DOM擴(kuò)展
- 第十二章 DOM2和DOM3
- 第十三章 事件
- 第十四章 表單腳本
- 第十六章 HTML5腳本程序
- 第十七章 錯誤處理與調(diào)試
- 第二十章 JSON
- 第二十一章 AJAX和Comet
- 第二十二章 高級技巧
- 第二十三章 離線應(yīng)用與客戶端存儲
- 第二十四章 最佳實踐
- 第二十五章 新興的API
