javascript 鏈?zhǔn)秸Z(yǔ)法

jquery 鏈?zhǔn)秸Z(yǔ)法如何實(shí)現(xiàn),底層代碼?

$("#Test").css('color','red').show(200).removeClass('style');

上面例子就是鏈?zhǔn)讲僮?,為id=test 的對(duì)象進(jìn)行三項(xiàng)操作;

鏈?zhǔn)秸{(diào)用的原理
在對(duì)象上的方法最后 加上return this
把對(duì)象再返回回來(lái),對(duì)象就繼續(xù)調(diào)用方法了,所以就可以鏈?zhǔn)讲僮髁恕?/p>

var obj={};
obj.a=function(){
    console.log("a")
    return this
}
obj.b=function(){
    console.log("n")
    return this
}
obj.a().b();
function add (num) {
    var count = num;
    var _b = function(l){
        count += l;
        return _b
    }
    _b.valueOf = function(){
        return count
    }
    return _b
}
var c = add(1)(2)(3);
console.log(c)    //6

下面我們來(lái)詳細(xì)分析一下代碼:
1.首先,在add方法內(nèi)部,我們是通過(guò)私有的_b方法實(shí)現(xiàn)的加法,而不是在add方法自身實(shí)現(xiàn)的,這里涉及到了函數(shù)式編程,這個(gè)概念我們就不在此做展開(kāi)了,有興趣的童鞋可以自己研究一下,可以說(shuō)這是一種很不錯(cuò)的開(kāi)發(fā)模式;add第一次執(zhí)行后,返回了_b方法
2.在返回的_b方法中我們形成了對(duì)count的閉包,這樣我們可以實(shí)現(xiàn)累計(jì)加和;還有一點(diǎn)需要注意,就是_b方法每次執(zhí)行時(shí)都返回了它自身,這就實(shí)現(xiàn)了鏈?zhǔn)?br> 3.最后,也是比較關(guān)鍵的,就是在輸出add的結(jié)果,即add(1)(2)(3)的結(jié)果時(shí),如何讓它輸出count,這里涉及了valueOf和toString方法的知識(shí),還是那句話,感興趣的童鞋可以自己研究一下;在這里最后能夠正確輸出6的原理是:_b是Function,是Object的一種特殊形式,當(dāng)我們做類似打印console等操作時(shí),會(huì)自動(dòng)調(diào)用其valueOf方法(其實(shí)底層實(shí)現(xiàn)沒(méi)有我說(shuō)的這么簡(jiǎn)單,哈哈,但是大概是這么個(gè)意思),所以我們重寫(xiě)了valueOf方法來(lái)達(dá)到返回count的目的

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容