最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS鏈?zhǔn)秸{(diào)用的實(shí)現(xiàn)方法

 更新時間:2013年03月07日 15:37:10   作者:  
程序開發(fā)人員可以使用一些簡單的技術(shù)來改進(jìn)自己的代碼編寫工作。你可以寫一些函數(shù)來處理各種常見任務(wù),以節(jié)省時間;也可以改進(jìn)一下代碼的實(shí)現(xiàn)方式,比如你可以把方法的鏈?zhǔn)秸{(diào)用技術(shù)用到自己所寫的JS庫中,把自己喜歡的方法串起來調(diào)用。

鏈?zhǔn)秸{(diào)用
    鏈?zhǔn)秸{(diào)用其實(shí)只不過是一種語法招數(shù)。它能讓你通過重用一個初始操作來達(dá)到用少量代碼表達(dá)復(fù)雜操作的目的。該技術(shù)包括兩個部分:

一個創(chuàng)建代表HTML元素的對象的工廠。

一批對這個HTML元素執(zhí)行某些操作的方法。

調(diào)用鏈的結(jié)構(gòu)
$函數(shù)負(fù)責(zé)創(chuàng)建支持鏈?zhǔn)秸{(diào)用的對象

復(fù)制代碼 代碼如下:

(function() {
    /*
     * 創(chuàng)建一個私有class
     * @param {Object} els  arguments 所有參數(shù)組成的類數(shù)組
     */
    function _$(els) {
        this.elements = [];             //存放HTML元素
        for(var i=0, len=els.length; i<len; i++) {
            var element = els[i];
            if(typeof element === 'string') {
                element = document.getElementById(element);
            }
            this.elements.push(element);
        }
    }
    //對HTML元素可執(zhí)行的操作
    _$.prototype = {
        each: function() {},
        setStyle: function() {},
        show: function() {},
        addEvent: function() {},
    };   
    //對外開放的接口
    window.$ = function() {
        return new _$(arguments);
    };  
})();

由于所有對象都會繼承其原型對象的屬性和方法,所以我們可以讓定義在原型對象中的那些方法都返回用以調(diào)用方法的實(shí)例對象的引用,這樣就可以對那些方法進(jìn)行鏈?zhǔn)秸{(diào)用了。

復(fù)制代碼 代碼如下:

(function() {
    /*
     * 創(chuàng)建一個私有class
     * @param {Object} els  arguments 所有參數(shù)組成的類數(shù)組
     */
    function _$(els) {
        //...
    }
    //對HTML元素可執(zhí)行的操作
    _$.prototype = {
        each: function(fn) {        //fn 回調(diào)函數(shù)
            for(var i=0; i<this.elements.length; i++) {
                //執(zhí)行l(wèi)en次,每次把一個元素elements[i]作為參數(shù)傳遞過去
                fn.call(this, this.elements[i]);
            }
            return this;
        },
        setStyle: function(prop, value) {
            this.each(function(el) {
                el.style[prop] = value;
            });
            return this;
        },
        show: function() {
            var that = this;
            this.each(function(el) {
                that.setStyle('display', 'block');
            });
            return this;
        },
        addEvent: function(type, fn) {
            var addHandle = function(el) {
                if(document.addEventListener) {
                    el.addEventListener(type, fn, false);
                }else if(document.attachEvent) {
                    el.attachEvent('on'+type, fn);
                }
            };
            this.each(function(el) {
                addHandle(el);
            });
            return this; 
        }
    };
    //對外開放的接口
    window.$ = function() {
        return new _$(arguments);
    }

})();

//----------------------- test --------
$(window).addEvent('load', function() {
    $('test-1', 'test-2').show()
    .setStyle('color', 'red')
    .addEvent('click', function() {
        $(this).setStyle('color', 'green');
    });
})

鏈?zhǔn)秸{(diào)用的方法獲取數(shù)據(jù)
    使用回調(diào)函數(shù)從支持鏈?zhǔn)秸{(diào)用的方法獲取數(shù)據(jù)。鏈?zhǔn)秸{(diào)用很適合賦值器方法,但對于取值器方法,你可能希望他們返回你要的數(shù)據(jù)而不是this(調(diào)用該方法的對象).解決方案:利用回調(diào)技術(shù)返回所要的數(shù)據(jù).

復(fù)制代碼 代碼如下:

window.API = window.API || function() {
    var name = 'mackxu';
    //特權(quán)方法
    this.setName = function(name0) {
        name = name0;
        return this;
    };
    this.getName = function(callback) {
        callback.call(this, name);
        return this;
    };
};
//------------- test ---
var obj = new API();
obj.getName(console.log).setName('zhangsan').getName(console.log);

設(shè)計(jì)一個支持方法鏈?zhǔn)秸{(diào)用的JS庫
JS庫特征:

事件: 添加和刪除事件監(jiān)聽器、對事件對象進(jìn)行規(guī)劃化處理

DOM: 類名管理、樣式管理

Ajax: 對XMLHttpRequest進(jìn)行規(guī)范化處理

復(fù)制代碼 代碼如下:

Function.prototype.method = function(name, fn) {
    this.prototype[name] = fn;
    return this;
};
(function() {
    function _$(els) {
        //...
    }
    /*
     * Events
     *      addEvent
     *      removeEvent
     */
    _$.method('addEvent', function(type, fn) {
        //... 
    }).method('removeEvent', function(type, fn) {

    })
    /*
     * DOM
     *      addClass
     *      removeClass
     *      hover
     *      hasClass
     *      getClass
     *      getStyle
     *      setStyle
     */
    .method('addClass', function(classname) {
        //...
    }).method('removeClass', function(classname) {
        //...
    }).method('hover', function(newclass, oldclass) {
        //...
    }).method('hasClass', function(classname) {
        //...
    }).method('getClass', function(classname) {
        //...
    }).method('getStyle', function(prop) {
        //...
    }).method('setStyle', function(prop, val) {
        //...
    })
    /*
     * AJAX
     *      ajax
     */
    .method('ajax', function(url, method) {
        //...
    });

    window.$ = function() {
        return new _$(arguments);
    };
    //解決JS庫命名沖突問題
    window.installHelper = function(scope, interface) {
        scope[interface] = function() {
            return _$(arguments)
        }
    } 
})();

小結(jié):

    鏈?zhǔn)秸{(diào)用有助于簡化代碼的編寫工作,并在某種程度上可以讓代碼更加簡潔、易讀。很多時候使用鏈?zhǔn)秸{(diào)用可以避免多次重復(fù)使用一個對象變量,從而減少代碼量。如果想讓類的接口保持一致,讓賦值器和取值器都支持鏈?zhǔn)秸{(diào)用,那么你可以在取值器中使用回調(diào)函數(shù)來解決獲取數(shù)據(jù)問題。

相關(guān)文章

  • JavaScript 實(shí)現(xiàn)同時選取多個時間段的方法

    JavaScript 實(shí)現(xiàn)同時選取多個時間段的方法

    這篇文章主要介紹了JavaScript 實(shí)現(xiàn)同時選取多個時間段的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 微信小程序使用WxJava獲取用戶手機(jī)號步驟

    微信小程序使用WxJava獲取用戶手機(jī)號步驟

    這篇文章主要介紹了微信小程序使用WxJava獲取用戶手機(jī)號的相關(guān)資料,還詳細(xì)講解了WxMpService接口的主要功能和常用方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • Javascript 遍歷頁面text控件詳解

    Javascript 遍歷頁面text控件詳解

    本篇文章主要是對Javascript遍歷頁面text控件進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • javascript 圖片裁剪技巧解讀

    javascript 圖片裁剪技巧解讀

    本文將提供php版的JavaScript裁剪圖片代碼,僅供大家參考
    2012-11-11
  • 用webAPI實(shí)現(xiàn)圖片放大鏡效果

    用webAPI實(shí)現(xiàn)圖片放大鏡效果

    這篇文章主要為大家詳細(xì)介紹了用webAPI實(shí)現(xiàn)圖片放大鏡效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • JavaScript中return false的用法

    JavaScript中return false的用法

    這篇文章主要介紹了JavaScript中return false的用法,在大多數(shù)情況下,為事件處理函數(shù)返回false,可以防止默認(rèn)的事件行為,需要的朋友可以參考下
    2015-03-03
  • echarts實(shí)現(xiàn)折線圖的拖拽效果

    echarts實(shí)現(xiàn)折線圖的拖拽效果

    這篇文章主要為大家詳細(xì)介紹了echarts實(shí)現(xiàn)折線圖的拖拽效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • JavaScript 中字符串和數(shù)組的概念解析與多角度對比區(qū)分

    JavaScript 中字符串和數(shù)組的概念解析與多角度對比區(qū)分

    JavaScript中的字符串和數(shù)組是兩種重要的數(shù)據(jù)結(jié)構(gòu),各有特點(diǎn)和應(yīng)用場景,字符串主要用于文本處理,是不可變的;數(shù)組用于存儲有序集合,是可變的,理解它們的區(qū)別和應(yīng)用場景,有助于編寫更高效和易維護(hù)的代碼,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • JavaScript中數(shù)組flat方法的使用與實(shí)現(xiàn)方法

    JavaScript中數(shù)組flat方法的使用與實(shí)現(xiàn)方法

    在Array的顯示原型下有一個flat方法,可以將多維數(shù)組,降維,傳的參數(shù)是多少就降多少維,下面這篇文章主要給大家介紹了關(guān)于JavaScript中數(shù)組flat方法的使用與實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 前端深入理解Typescript泛型概念

    前端深入理解Typescript泛型概念

    這篇文章主要介紹了前端深入理解Typescript泛型概念,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03

最新評論

汝阳县| 离岛区| 白城市| 玉树县| 五原县| 仲巴县| 瓮安县| 双鸭山市| 五常市| 衡山县| 荣昌县| 车致| 焦作市| 徐水县| 页游| 临城县| 高淳县| 沛县| 信丰县| 绩溪县| 清丰县| 霞浦县| 治县。| 达日县| 长寿区| 瑞昌市| 天门市| 浦县| 毕节市| 金门县| 阿拉善左旗| 仙桃市| 遂昌县| 日土县| 富阳市| 铁岭市| 班玛县| 十堰市| 潮州市| 荃湾区| 杭州市|