1.Object.pototype.toString.call(value)可用于進行安全的類型檢測。
2.避免因【調用構造函數時沒有使用new操作符】導致全局變量屬性受污染的方法是,使用作用域安全的構造函數。
3.惰性載入函數。第一種方法是在第一次調用的過程中,根據不同分支將該函數覆蓋為另一個合適的函數。第二種方法是創建一個匿名、自執行的函數,每個分支返回正確的函數。
4.函數柯里化的概念很簡單:只傳遞給函數一部分參數來調用它,讓它返回一個函數去處理剩下的參數。
5.不可擴展對象:Object.preventExtensions(object)用于禁止給對象添加新的屬性和方法。
6.密封對象:密封對象是指不可拓展,且已有屬性的[[Configurable]]特性被設置為false的對象。這也意味著不能刪除已有屬性和方法。要密封對象,可以使用Object.seal(object)方法。
7.凍結對象:在密封對象的基礎上,已有屬性的[[Writable]]特性會被設置為false(如果定義了[[set]]函數,則訪問器屬性仍然是可寫的)。要凍結對象,可以使用Object.freeze(object)方法。
8.為了避免setInterval()導致的**某些間隔被跳過、多個定時器的代碼執行之間的間隔可能比預期的小**這兩個問題,可以用如下模式使用setTimeout()鏈式調用:
~~~
setTimeout(function(){
//處理中
setTimeout(arguments.callee,interval);
}),interval);
~~~
9.為了避免進行大量循環處理造成的腳本長時間運行,可以使用定時器分割這個循環,這是一種叫數組分塊的技術。要實現數組分塊非常簡單,可以使用以下函數:
~~~
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.通過『函數節流』技術可以阻止某些代碼在沒有間斷的情況下連續重復執行,從而達到節省性能的效果。函數節流可以使用以下的throttle()函數實現:
~~~
function throttle(method, context) {
clearTimeout(method.tID);
method.tID = setTimeout(function(){
method.call(context);
},100)
}
~~~
11.自定義事件背后的概念是創建一個事件管理對象,讓其他對象監聽那些事件。自定義事件實質是將DOM對象的事件處理機制應用到非DOM對象中。自定義事件的主要作用是當代碼存在多個部分在特定時刻相互交互的情況下,實現解耦。