日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Bind、Call、Apply的區別?如何實現bind

來源: 責編: 時間:2024-03-18 09:41:33 174觀看
導讀bind、call、apply的作用?bind, call, 和 apply 是 JavaScript 中非常有用的方法,它們主要用于改變函數的執行上下文以及傳遞參數。bind:bind()方法創建一個新的函數,該函數的this關鍵字被綁定到指定的對象,同時還可以提

bind、call、apply的作用?

bind, call, 和 apply 是 JavaScript 中非常有用的方法,它們主要用于改變函數的執行上下文以及傳遞參數。LRW28資訊網——每日最新資訊28at.com

  • bind:bind()方法創建一個新的函數,該函數的this關鍵字被綁定到指定的對象,同時還可以提供一系列參數。這對于在事件處理函數、定時器或回調函數中綁定上下文非常有用。
const obj = {  x: 42};function getX(y) {  return this.x + y;}const boundGetX = getX.bind(obj);console.log(boundGetX(2)); // 輸出 44
  • call:call()方法調用一個函數,允許你指定函數執行時的上下文(this),并傳遞一系列參數作為函數的參數。這在需要立即調用函數并指定上下文的情況下非常有用。
const obj = {  x: 42};function getX(y) {  return this.x + y;}console.log(getX.call(obj, 2)); // 輸出 44
  • apply:apply()方法調用一個函數,允許你指定函數執行時的上下文(this),同時傳遞一個數組或類數組對象作為函數的參數。這在需要傳遞參數數組的情況下非常有用。
const obj = {  x: 42};function getX(y) {  return this.x + y;}console.log(getX.apply(obj, [2])); // 輸出 44

bind、call、apply的區別?

bind, call, 和 apply 是 JavaScript 中用于處理函數執行上下文和參數傳遞的方法,它們有著不同的特點和用途。LRW28資訊網——每日最新資訊28at.com

  • bind()

bind() 方法創建一個新的函數,該函數的 this 關鍵字被綁定到指定的對象,并且提供了一系列參數。不會立即執行函數,而是返回一個新的函數,可以稍后調用。LRW28資訊網——每日最新資訊28at.com

const obj = {  x: 42};function getX(y) {  return this.x + y;}const boundGetX = getX.bind(obj);console.log(boundGetX(2)); // 輸出 44
  • call()

call() 方法調用一個函數,允許你顯式指定函數執行時的上下文(this),并且可以傳遞一系列參數作為函數的參數。立即執行函數。LRW28資訊網——每日最新資訊28at.com

const obj = {  x: 42};function getX(y) {  return this.x + y;}console.log(getX.call(obj, 2)); // 輸出 44
  • apply()

apply() 方法調用一個函數,允許你顯式指定函數執行時的上下文(this),同時傳遞一個數組或類數組對象作為函數的參數。立即執行函數。LRW28資訊網——每日最新資訊28at.com

const obj = {  x: 42};function getX(y) {  return this.x + y;}console.log(getX.apply(obj, [2])); // 輸出 44

區別總結:LRW28資訊網——每日最新資訊28at.com

  • 參數傳遞方式:

bind() 接受一系列參數,返回一個新函數。LRW28資訊網——每日最新資訊28at.com

call() 和 apply() 接受一個參數列表或數組作為參數。LRW28資訊網——每日最新資訊28at.com

  • 執行時機:
  • bind() 不會立即執行函數,而是返回一個新的綁定函數。
  • call() 和 apply() 立即執行函數。
  • 返回值:
  • bind() 返回一個新的函數。
  • call() 和 apply() 直接執行函數,并返回執行結果。

實現

下面是一個簡單的 bind 函數的實現,該實現基于了對 JavaScript 的原型鏈和閉包的理解:LRW28資訊網——每日最新資訊28at.com

Function.prototype.myBind = function (context) {  const fn = this; // 保存原函數  const args = Array.prototype.slice.call(arguments, 1); // 獲取除第一個參數(context)以外的所有參數  return function () { // 返回一個函數,這個函數會被當做綁定后的函數調用    const bindArgs = Array.prototype.slice.call(arguments); // 獲取 bind 方法的參數    return fn.apply(context, args.concat(bindArgs)); // 在 context 上執行原函數,并傳入所有參數  };};// 示例const obj = {  x: 42};function getX(y) {  return this.x + y;}const boundGetX = getX.myBind(obj);console.log(boundGetX(2)); // 輸出 44

在這個實現中,通過 Function.prototype 對象擴展了一個 myBind 方法。在 myBind 方法內部,首先保存了原函數 fn,然后提取除第一個參數(要綁定的上下文)之外的所有參數到 args 數組中。然后,我們返回了一個新的函數,這個函數會在指定的上下文 context 上執行原函數,并將原始的參數與綁定的參數合并起來傳遞給原函數。LRW28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-76520-0.htmlBind、Call、Apply的區別?如何實現bind

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 徹底理解異步編程!你理解了嗎?

下一篇: 一個熟悉又陌生的關鍵字:volatile

標簽:
  • 熱門焦點
  • 一加Ace2 Pro真機揭曉 鈦空灰配色質感拉滿

    終于,在經過了幾波預熱之后,一加Ace2 Pro的外觀真機圖在網上出現了。還是博主數碼閑聊站曝光的,這次的外觀設計還是延續了一加11的方案,只是細節上有了調整,例如新加入了鈦空灰
  • Mate60手機殼曝光 致敬自己的經典設計

    8月3日消息,今天下午博主數碼閑聊站帶來了華為Mate60的第三方手機殼圖,可以讓我們在真機發布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • 六大權益!華為8月服務日開啟:手機免費貼膜、維修免人工費

    8月5日消息,一年一度的華為開發者大會2023(Together)日前在松山湖拉開帷幕,與此同時,華為8月服務日也式開啟,到店可享六大專屬權益。華為用戶可在華為商城Ap
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數據的地方,是數據源的一種,比如大家經常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數據,它既可以保
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會涉及各種各樣的安全任務,包括但不限于:開發某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • 馮提莫簽約抖音公會 前“斗魚一姐”消失在直播間

    來源:直播觀察提起“馮提莫”這個名字,很多網友或許聽過,但應該不記得她是哪位主播了。其實,作為曾經的“斗魚一姐”,馮提莫在游戲直播的年代影響力不輸于現
  • DRAM存儲器10月價格下跌,NAND閃存本月價格與上月持平

    10月30日,據韓國媒體消息,自今年年初以來一直在上漲的 DRAM 存儲器的交易價格僅在本月就下跌了近 10%,此次是全年首次降價,而NAND 閃存本月價格與上月持平。市
  • SN570 NVMe SSD固態硬盤 價格與性能兼具

    SN570 NVMe SSD固態硬盤是西部數據發布的最新一代WD Blue系列的固態硬盤,不僅閃存技術更為精進,性能也得到了進一步的躍升。WD Blue SN570 NVMe SSD的包裝外
  • 與兆芯合作 聯想推出全新旗艦版筆記本電腦開天N7系列

    聯想與兆芯合作推出全新聯想旗艦版筆記本電腦開天 N7系列。這個系列采用兆芯KX-6640MA處理器平臺,KX-6640MA 處理器是采用了陸家嘴架構,16nm 工藝,4 核 4 線
Top 主站蜘蛛池模板: 湖南省| 深水埗区| 湄潭县| 青河县| 吉安市| 博乐市| 辽阳县| 本溪市| 黑河市| 禄劝| 宜章县| 七台河市| 长治县| 呈贡县| 阳谷县| 平昌县| 陇南市| 肃宁县| 东明县| 青阳县| 吉首市| 理塘县| 钦州市| 和政县| 陆川县| 名山县| 师宗县| 贞丰县| 肇庆市| 德兴市| 繁昌县| 武强县| 井研县| 宜昌市| 五河县| 通海县| 浮山县| 普定县| 扶余县| 大埔县| 呼图壁县|