成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

javaScript鏈?zhǔn)秸{(diào)用原理以及加法實(shí)現(xiàn)

LuDongWei / 1613人閱讀

摘要:相信很多小伙伴在面試的過程中都被問過鏈?zhǔn)秸{(diào)用的原理,甚至有些面試官還會(huì)讓你用其實(shí)現(xiàn)例如加法操作,舉例第一次看到這個(gè)題目時(shí),或許你沒有什么頭緒,不要緊,讓我們慢慢來首先,大家還是否記得在使用時(shí),我們會(huì)經(jīng)常這樣去操作一個(gè)節(jié)點(diǎn)這是怎么做到的原理很

相信很多小伙伴在面試的過程中都被問過js鏈?zhǔn)秸{(diào)用的原理,甚至有些面試官還會(huì)讓你用其實(shí)現(xiàn)例如加法操作,舉例:

add(1)(2)(3)    //6

第一次看到這個(gè)題目時(shí),或許你沒有什么頭緒,不要緊,讓我們慢慢來;首先,大家還是否記得在使用jQuery時(shí),我們會(huì)經(jīng)常這樣去操作一個(gè)jQuery節(jié)點(diǎn)

$("elem").show().css("color","red");

這是怎么做到的?原理很簡(jiǎn)單:就是jQuery節(jié)點(diǎn)在調(diào)用api后都會(huì)返回節(jié)點(diǎn)自身,類似于:

var Obj = {
    a: 1,
    func: function(){
        this.a += 1;
        return this
    }
}
Obj.func().func();
console.log(Obj.a);    //3

現(xiàn)在大致理解了鏈?zhǔn)秸{(diào)用的原理了吧!然后我們?cè)賮砜慈绾螌?shí)現(xiàn)文章開頭的題目;首先我們來分析一下有哪幾點(diǎn)是我們需要注意的:

add函數(shù)在后續(xù)的鏈?zhǔn)秸{(diào)用時(shí),應(yīng)該記錄之前的加和,如何實(shí)現(xiàn)?

add函數(shù)在每次調(diào)用后既要保留自身的引用,又要返回操作結(jié)果,如何實(shí)現(xiàn)?

先上代碼,然后我們逐一分析

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

下面我們來詳細(xì)分析一下代碼:
1.首先,在add方法內(nèi)部,我們是通過私有的_b方法實(shí)現(xiàn)的加法,而不是在add方法自身實(shí)現(xiàn)的,這里涉及到了函數(shù)式編程,這個(gè)概念我們就不在此做展開了,有興趣的童鞋可以自己研究一下,可以說這是一種很不錯(cuò)的開發(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)沒有我說的這么簡(jiǎn)單,哈哈,但是大概是這么個(gè)意思),所以我們重寫了valueOf方法來達(dá)到返回count的目的

結(jié)語
以上就是我對(duì)鏈?zhǔn)秸{(diào)用的一個(gè)粗略認(rèn)識(shí),有些概念可能表達(dá)的不是很清晰;其實(shí)樓主的目的就是想引導(dǎo)大家去研究一下鏈?zhǔn)秸{(diào)用所涉及到的一些js知識(shí),不喜請(qǐng)輕噴O(∩_∩)O哈哈~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/82051.html

相關(guān)文章

  • 從 ++[[]][+[]]+[+[]]==10? 深入淺出弱類型 JS 的隱式轉(zhuǎn)換

    摘要:與此相對(duì),強(qiáng)類型語言的類型之間不一定有隱式轉(zhuǎn)換。三為什么是弱類型弱類型相對(duì)于強(qiáng)類型來說類型檢查更不嚴(yán)格,比如說允許變量類型的隱式轉(zhuǎn)換,允許強(qiáng)制類型轉(zhuǎn)換等等。在中,加性運(yùn)算符有大量的特殊行為。 從++[[]][+[]]+[+[]]==10?深入淺出弱類型JS的隱式轉(zhuǎn)換 本文純屬原創(chuàng)? 如有雷同? 純屬抄襲? 不甚榮幸! 歡迎轉(zhuǎn)載! 原文收錄在【我的GitHub博客】,覺得本文寫的不算爛的...

    miya 評(píng)論0 收藏0
  • JS函數(shù)式編程 - 函數(shù)組合與柯里化

    摘要:而在函數(shù)式編程中方法是獨(dú)立于數(shù)據(jù)的,我們可以把上面以函數(shù)式的方式在寫一遍你肯定會(huì)說,你是在逗我。對(duì)比兩個(gè)生成新函數(shù)的過程,沒有柯里化的相對(duì)而言就有一點(diǎn)啰嗦了。 我們都知道單一職責(zé)原則,其實(shí)面向?qū)ο蟮腟OLID中的S(SRP, Single responsibility principle)。在函數(shù)式當(dāng)中每一個(gè)函數(shù)就是一個(gè)單元,同樣應(yīng)該只做一件事。但是現(xiàn)實(shí)世界總是復(fù)雜的,當(dāng)把現(xiàn)實(shí)世界映射...

    MingjunYang 評(píng)論0 收藏0
  • JavaScript標(biāo)準(zhǔn)庫系列——三大包裝對(duì)象(四)

    摘要:目錄導(dǎo)語包裝對(duì)象的理解三大包裝對(duì)象的知識(shí)點(diǎn)小結(jié)導(dǎo)語包裝對(duì)象是為了彌補(bǔ)基本數(shù)據(jù)類型的非對(duì)象特性而產(chǎn)生的,對(duì)于基本類型值而言,本來是不存在屬性和方法的,但是我們可以在使用字面量創(chuàng)建字符串時(shí),調(diào)用例如的方法,那么其內(nèi)在原理究竟是什么呢閱讀完本篇文 目錄 導(dǎo)語 1. 包裝對(duì)象的理解 2. 三大包裝對(duì)象的知識(shí)點(diǎn) 3. 小結(jié) 導(dǎo)語 包裝對(duì)象是為了彌補(bǔ)基本數(shù)據(jù)類型的非對(duì)象特性而產(chǎn)生的,對(duì)于基本類型...

    sean 評(píng)論0 收藏0
  • javaScript鏈?zhǔn)?/em>調(diào)用

    摘要:通過實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用來理解鏈?zhǔn)秸{(diào)用是我們平常經(jīng)常會(huì)用到,比如中的還有中的。直接用一個(gè)匿名函數(shù)返回一個(gè)的對(duì)象,然后賦值給并掛載到全局上,這樣就實(shí)現(xiàn)了一個(gè)的鏈?zhǔn)秸{(diào)用了。 通過實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用來理解 ?? 鏈?zhǔn)秸{(diào)用是我們平常經(jīng)常會(huì)用到,比如JQuery中的$(id).eq(0), 還有l(wèi)odash中的_.chain().push()。 這些都是平常會(huì)用到的,但是都是已經(jīng)封裝好的,我們知道用起來很方便...

    boredream 評(píng)論0 收藏0
  • JavaScript類型轉(zhuǎn)換原理

    摘要:其實(shí)這三個(gè)函數(shù)不僅僅可以當(dāng)作構(gòu)造函數(shù),它們可以直接當(dāng)作普通的函數(shù)來使用,將任何類型的參數(shù)轉(zhuǎn)化成原始類型的值其實(shí)這三個(gè)函數(shù)用于類型轉(zhuǎn)換的時(shí)候,調(diào)用的就是內(nèi)部的方法這里解釋一下的過程執(zhí)行執(zhí)行內(nèi)部函數(shù)執(zhí)行因?yàn)椴皇窃碱愋?,進(jìn)入下一步。 本文修改自本人以前寫的文章。 從類型說起 js只有7種類型: 原始類型(primitives types) boolean number 包括Infi...

    lewif 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<