1、惰性加载函数 (判断各个浏览器中是否支持某个属性)
function addEvent(elem, type, handler){
if(elem.addEventListener){
return function(elem, type, handler){
elem.addEventListener(type, handler, false);
}
}else if(elem.attachEvent){
return function(elem, type, handler){
elem.attachEvent("on"+type, handler);
}
}
}
这样书写代码,函数只会在第一次执行的时候去做检查,以后每一次都自动执行确定的函数操作。
2、函数绑定和函数柯里化
函数绑定可以让函数在指定的环境中执行某一段代码;函数柯里化可以让函数在任何情况下传递任何数量的参数去执行。
函数绑定
function bind(fn, context, args){
return function(args){
fn.call(context, args);
}
}
函数柯里化
function curry(fn){
var args = Array.prototype.slice.call(arguments, 1);
return function(){
var innerArgs = Array.prototype.slice.call(arguments);
var finalArgs = args.concat(innerArgs);
return fn.apply(null, finalArgs);
};
}
函数柯里化主要解决的问题是,已有的接口不适合我们当前的操作环境,需要对已有的接口进行相应的转换才可以使用。
ECMAScript 5允许通过以下几种方式来创建防篡改对象。
•不可扩展的对象,不允许给对象添加新的属性或方法。
•密封的对象,也是不可扩展的对象,不允许删除已有的属性和方法。
•冻结的对象,也是密封的对象,不允许重写对象的成员。
setTimeout和setInterval
setTimeout的定义是指多少时间之后将回调函数加入到js的执行队列之中;回调函数是否立即执行取决于当前的执行队列是否空闲。比较好的例子如下:
elem.on("click", function(event){
setTimeout(function(){
//回调函数
}, 400);
//执行其他click操作
})
假如click内部的执行时间为500,那么setTimeout的回调函数至少要等待500ms才执行。
setTnterval是重复定时器。它只允许当前js执行队列中有一个相同的回调函数在执行,比如说时间间隔为200ms,但是回调函数的执行时间为404,那么当第二个回调函数要加入到执行队列中时,发现第一个回调函数在执行,那么第二个回调函数不会加入到执行队列中。
自定义事件
具体实现方式:每一个绑定自定义事件时,给每一个事件类型加对应的回调函数数组;每一次触发自定义事件时,将对应的回调函数数组里的回调函数挨个执行一次。
拖拽
使用的事件类型未mouseenter、mousemove、mouseleave事件。需要考虑offsetX和offsetY的值。可以加入自定义事件来拓展("dragstart"、"drag"、"dragend")。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。