自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JavaScript 中的 bind()、apply() 和 call()鮮為人知的區(qū)別

開發(fā) 前端
每個(gè)開發(fā)人員都應(yīng)該充分了解它們的工作原理,并能夠辨別它們之間的細(xì)微差別。

每個(gè)開發(fā)人員都應(yīng)該充分了解它們的工作原理,并能夠辨別它們之間的細(xì)微差別。

所以你知道,JS 函數(shù)是一等公民。

這意味著:它們都只是對象值——Function 類的所有實(shí)例,具有方法和屬性:

因此 bind()、apply() 和 call() 是每個(gè) JavaScript 函數(shù)都具有的 3 個(gè)基本方法。

bind()

你是否和我一起經(jīng)歷過 React 早期的痛苦歲月;那時(shí)我們還在使用這樣的類組件和事件處理程序?

這只是 bind() 的多種應(yīng)用之一——一種被嚴(yán)重低估的 JavaScript 方法。

如果沒有 bind(),sayName() 會(huì)一團(tuán)糟——alert() 永遠(yuǎn)無法工作。

因?yàn)?React 內(nèi)部對這個(gè)方法做了一些可疑的事情,完全搞砸了 this 內(nèi)部的含義。

之前 sayName 完全可以毫無問題地顯示警報(bào)——就像在這個(gè)其他類中一樣:

但猜猜 React 在幕后對greet事件處理程序方法做了什么?

它將其重新分配給另一個(gè)變量:

猜猜會(huì)發(fā)生什么——它無處可尋:

這就是 bind 發(fā)揮作用的地方——它將 this 更改為您選擇的任何實(shí)例對象:

因此,我們將函數(shù)綁定到對象——綁定目標(biāo)。

(我知道它是“綁定的”,但我們可以說它是綁定的,就像我們將“index”而不是“indices”說成“indexes”一樣)。

它是不可變的——它返回綁定函數(shù)而不改變原始函數(shù)的任何內(nèi)容。

這讓我們可以盡可能多地使用它:

vs call()

call 和 bind 之間只有很小的區(qū)別。

bind 創(chuàng)建綁定函數(shù)供您隨意使用。

但是 call?它會(huì)動(dòng)態(tài)創(chuàng)建一個(gè)臨時(shí)綁定函數(shù)并立即調(diào)用它:

因此, call() 基本上就是 bind() + 一個(gè)調(diào)用。

但是當(dāng)函數(shù)有參數(shù)時(shí)怎么辦呢?我們該怎么辦?

完全沒問題 — 只需將它們作為更多參數(shù)傳遞給call即可:

你實(shí)際上可以使用 bind() 做同樣的事情:

vs apply()

一開始你可能會(huì)認(rèn)為 apply() 和 call() 做的事情完全一樣:

但就像 bind() 與 call() 一樣,需要注意一個(gè)細(xì)微的差別:

傳遞的參數(shù):

我使用一個(gè)助記技巧來記住兩者的區(qū)別:

  • call() 用于逗號(hào)
  • apply() 用于數(shù)組

回顧總結(jié)

  • bind()——綁定到此并返回一個(gè)新函數(shù),可重復(fù)使用。
  • call()——綁定 + 調(diào)用函數(shù),使用逗號(hào)傳遞參數(shù)。
  • apply()——綁定 + 調(diào)用函數(shù),使用數(shù)組傳遞參數(shù)。
責(zé)任編輯:華軒 來源: web前端開發(fā)
相關(guān)推薦

2024-08-26 08:36:26

2024-03-15 08:21:17

bindJavaScrip函數(shù)

2019-12-12 20:49:05

JavaScript語言運(yùn)算符

2024-08-26 14:35:19

JavaScript關(guān)鍵字對象

2021-06-18 07:16:17

JavaScript apply()方法call()方法

2021-12-05 08:27:56

Javascript 高階函數(shù)前端

2020-03-27 22:33:30

JavaScript運(yùn)算符逗號(hào)

2024-03-04 16:32:02

JavaScript運(yùn)算符

2011-03-22 09:49:15

JavaScript

2010-01-07 10:05:51

IT顧問特質(zhì)

2015-03-02 09:22:09

Javascript函數(shù)用法apply

2017-10-10 14:36:07

前端Javascriptapply、call、

2024-09-10 08:35:57

2024-03-21 14:27:13

JavaScript數(shù)組

2009-02-09 09:16:28

熱鍵自注銷漏洞

2011-05-03 13:13:52

編程PHPJava

2014-04-22 16:38:12

GitHubGitHub 使用技巧

2024-05-07 00:00:00

工具類開發(fā)者功能

2009-07-09 17:38:35

2022-05-30 09:01:13

CSS技巧前端
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)