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对象中。自定义事件的主要作用是当代码存在多个部分在特定时刻相互交互的情况下,实现解耦。