《JavaScript高级程序设计》22章 JavaScript高级用法

一、惰性加载函数 (判断各个浏览器中是否支持某个属性)数组

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);
        }
    }
}

这样书写代码,函数只会在第一次执行的时候去作检查,之后每一次都自动执行肯定的函数操做。
二、函数绑定和函数柯里化
函数绑定可让函数在指定的环境中执行某一段代码;函数柯里化可让函数在任何状况下传递任何数量的参数去执行。浏览器

函数绑定app

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);    
    };
}

函数柯里化主要解决的问题是,已有的接口不适合咱们当前的操做环境,须要对已有的接口进行相应的转换才可使用。prototype

ECMAScript 5容许经过如下几种方式来建立防篡改对象。code

•不可扩展的对象,不容许给对象添加新的属性或方法。
•密封的对象,也是不可扩展的对象,不容许删除已有的属性和方法。
•冻结的对象,也是密封的对象,不容许重写对象的成员。对象

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")。

相关文章
相关标签/搜索