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

相關文章
相關標籤/搜索