在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    40 – 真正理解 Bind、Call 和 Apply

    40 – 真正理解 Bind、Call 和 Apply

    原文地址:https://dev.to/bhagatparwinder/truly-understand-bind-call-apply-21da

    Bind

    JavaScript 中的 this 扮演者重要的角色,在 JavaScript 中它是依據(jù)函數(shù)是怎么被調(diào)用的而不是它在哪聲明的(箭頭函數(shù)則表現(xiàn)為相反)。

    我們舉一個(gè)例子來示范一下 this 是如何工作的:

    const sayGreeting = { name: “Parwinder”, hello: function() { return `Hello, ${this.name}`; }}console.log(sayGreeting.hello()); // Hello, Parwinder

    hello 方法可以獲取 sayGreeting 上的 name 屬性,當(dāng)我用 sayGreeting 調(diào)用它時(shí),它是運(yùn)行在 sayGreeting 對(duì)象上下文中的。

    相反如果我這樣做:

    const sayGreeting = { name: “Parwinder”, hello: function() { return `Hello, ${this.name}`; }}const hello = sayGreeting.hello;console.log(hello === sayGreeting.hello); // trueconsole.log(hello()); // Hello, undefined

    盡管 hello 變量與 sayGreeting 對(duì)象上的 hello 方法相等,但它的執(zhí)行上下文并不是在 sayGreeting 中,而是在 window 或全局狀態(tài)中。

    bind 方法允許我們綁定上下文,它返回一個(gè)新的方法且上下文綁定為我們傳遞給 bind 函數(shù)的內(nèi)容。

    const sayGreeting = { name: “Parwinder”, hello: function() { return `Hello, ${this.name}`; }}const hello = sayGreeting.hello.bind(sayGreeting);console.log(hello()); // Hello, Parwinder

    實(shí)際業(yè)務(wù)中哪里需要使用 bind?

    上面的所有例子,數(shù)據(jù)的獲取和方法的調(diào)用都在一個(gè)對(duì)象上 bind 的作用并不明顯??捎袝r(shí)候當(dāng)你需要向一個(gè)對(duì)象借一個(gè)方法但運(yùn)行上下文需要在另一個(gè)對(duì)象中時(shí),你就需要使用 bind。

    const sayGreeting = { name: “Parwinder”, hello: function () { return `Hello, ${this.name}`; }}const nameObject = { name: “Lauren”}const hello = sayGreeting.hello.bind(nameObject);console.log(hello()); // Hello, Lauren

    sayGreeting 對(duì)象上有 hello 方法,所以在 nameObject 對(duì)象上就沒有必要再寫一個(gè)相同的方法。我可以向 sayGreeting 對(duì)象借用它然后運(yùn)行在 nameObject 上下文中。

    Call

    call 和 apply 與 bind 是有區(qū)別的,bind 返回一個(gè)新的方法而 call 和 apply 則立即調(diào)用執(zhí)行方法。call 把 this 作為第一個(gè)參數(shù),其他參數(shù)需要一個(gè)個(gè)的傳遞。它們都會(huì)傳遞到我們調(diào)用的函數(shù)中:

    const sayGreeting = { name: “Parwinder”, hello: function () { return `Hello, ${this.name}`; }}console.log(sayGreeting.hello.call(sayGreeting)); // Hello, Parwinder

    帶有其它參數(shù):

    const sayGreeting = { name: “Parwinder”, hello: function (trait, color) { return `Hello, ${this.name}. I see you ${trait} ${color}. It is my favorite too!`; }}console.log(sayGreeting.hello.call(sayGreeting, “like”, “red”));// Hello, Parwinder. I see you like red. It is my favorite too!

    Apply

    盡管 apply 和 call 類似都是直接執(zhí)行函數(shù),但它接受的是一個(gè)數(shù)組作為第二個(gè)參數(shù)而不是逗號(hào)分隔的值。

    const sayGreeting = { name: “Parwinder”, hello: function () { return `Hello, ${this.name}`; }}console.log(sayGreeting.hello.apply(sayGreeting)); // Hello, Parwinder

    當(dāng)沒有其余參數(shù)時(shí) apply 和 call 沒有區(qū)別,但是當(dāng)我們有其余參數(shù)時(shí),使用方法就有點(diǎn)區(qū)別:

    const sayGreeting = { name: “Parwinder”, hello: function (trait, color) { return `Hello, ${this.name}. I see you ${trait} ${color}. It is my favorite too!`; }}console.log(sayGreeting.hello.apply(sayGreeting, [“like”, “red”]));// Hello, Parwinder. I see you like red. It is my favorite too!

    apply 使得傳遞多個(gè)參數(shù)變得更容易些,但是現(xiàn)在 ES6 中使用擴(kuò)展運(yùn)算符傳遞多個(gè)參數(shù)也很容易了。

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
    用戶投稿
    上一篇 2022年6月21日 06:41
    下一篇 2022年6月21日 06:42

    相關(guān)推薦

    • 分享4條發(fā)微商朋友圈的方法(微商朋友圈應(yīng)該怎么發(fā))

      對(duì)于微商朋友來說,朋友圈的重要性不言而喻了。 那么微商的朋友圈到底該怎么發(fā)呢? 為什么同樣是經(jīng)營(yíng)一個(gè)朋友圈,有的微商看起來逼格滿滿,實(shí)際效果也不錯(cuò);而有的卻動(dòng)都不動(dòng)就被屏蔽甚至拉黑…

      2022年11月27日
    • 存儲(chǔ)過程語法(sql server存儲(chǔ)過程語法)

      今天小編給各位分享存儲(chǔ)過程語法的知識(shí),其中也會(huì)對(duì)sql server存儲(chǔ)過程語法進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧! oracle存儲(chǔ)過程基本語法…

      2022年11月26日
    • 《寶可夢(mèng)朱紫》夢(mèng)特性怎么獲得?隱藏特性獲取方法推薦

      寶可夢(mèng)朱紫里有很多寶可夢(mèng)都是擁有夢(mèng)特性會(huì)變強(qiáng)的寶可夢(mèng),很多玩家不知道夢(mèng)特性怎么獲得,下面就給大家?guī)韺毧蓧?mèng)朱紫隱藏特性獲取方法推薦,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 …

      2022年11月25日
    • 《寶可夢(mèng)朱紫》奇魯莉安怎么進(jìn)化?奇魯莉安進(jìn)化方法分享

      寶可夢(mèng)朱紫中的奇魯莉安要怎么進(jìn)化呢?很多玩家都不知道,下面就給大家?guī)韺毧蓧?mèng)朱紫奇魯莉安進(jìn)化方法分享,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 奇魯莉安進(jìn)化方法分享 奇魯莉安…

      2022年11月25日
    • 2023年擺地?cái)傎u什么最賺錢而且很受歡迎(2022年擺地?cái)偤戏▎?

      關(guān)于擺地?cái)傎嶅X每年的熱度也是非常高的,很多想要做點(diǎn)小本生意的商家也都會(huì)選擇擺地?cái)傔@個(gè)項(xiàng)目,所需要的成本也是非常低的。那么,2023年擺地?cái)傎u什么最賺錢而且很受歡迎?今天極客號(hào)小編整…

      2022年11月25日
    • 密接5+3是什么意思(密接人員是什么意思)

      如今新冠病例的傳播速度是越來越快了,對(duì)于感染了新冠病毒的人員來說都會(huì)采取隔離觀看措施。而據(jù)了解,當(dāng)前國(guó)內(nèi)又對(duì)新冠疫情防控政策做了新的調(diào)整優(yōu)化,其中密接管理調(diào)整為“5+3”。很多人對(duì)…

      2022年11月25日
    • 不知道考研真題哪里找?看這里!

      考研備考沖刺階段,知道大家都很疲憊,但是,別讓自己之前的努力白費(fèi),再堅(jiān)持堅(jiān)持,會(huì)看到你想要的結(jié)果的。 要是你想考研成功,有一個(gè)資料就必須要有。它就是:歷年考研真題。 考研真題的重要…

      2022年11月25日
    • 銳龍97900x參數(shù)規(guī)格跑分評(píng)測(cè) 銳龍97900x屬于什么檔次

      銳龍9 7900X是銳龍7000系列處理器中性能頂尖的型號(hào)之一,它采用了這一代標(biāo)配的zen4架構(gòu)和5nm制程工藝,那么它具體的參數(shù)跑分如何,在電腦上世紀(jì)發(fā)揮怎么樣呢,下面就來看看銳…

      2022年11月24日
    • 《寶可夢(mèng)朱紫》暴飛龍?jiān)趺醋??暴飛龍獲得方法

      寶可夢(mèng)朱紫暴飛龍位置在哪?在游戲中,很多玩家還不清楚暴飛龍具體要怎么樣獲得,其實(shí)獲得方法很簡(jiǎn)單,暴飛龍直接是沒得抓的,需要玩家從寶貝龍進(jìn)化得到,下面一起來看一下寶可夢(mèng)朱紫暴飛龍獲得…

      2022年11月23日
    • 《寶可夢(mèng)朱紫》布土撥怎么進(jìn)化?布土撥進(jìn)化方法介紹

      寶可夢(mèng)朱紫中,不同的寶可夢(mèng)有不同的進(jìn)化方法,其中布土撥的進(jìn)化方法是比較特殊的。很多玩家不知道寶可夢(mèng)朱紫布土撥怎么進(jìn)化,下面就帶來寶可夢(mèng)朱紫布土撥進(jìn)化方法介紹,一起來看看吧,希望能幫…

      2022年11月23日

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息