国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

如何手寫call、apply、bind?

VEIGHTZ / 2401人閱讀

摘要:可以改變,并且傳入參數,立刻執行,返回函數返回值手寫參數默認值并不會排除,所以重新賦值是調用的函數執行后刪除新增屬性可以改變,并且傳入參數,與不同的是,傳入的參數是數組或類數組,立刻執行,返回函數返回值手寫參數默認值并不會排除,所以重新賦值

call

Function.prototype.call(this, arg1, arg2, …..)
可以改變this,并且傳入參數,立刻執行,返回函數返回值

手寫call

Function.prototype.myCall = function(context = window, ...args) {
  context = context || window; // 參數默認值并不會排除null,所以重新賦值
  context.fn = this; // this是調用call的函數
  const result = context.fn(...args);
  delete context.fn; // 執行后刪除新增屬性
  return result;
}
apply

Function.prototype.apply(this, [arg1, arg2, …..])
可以改變this,并且傳入參數,與call不同的是,傳入的參數是數組或類數組,立刻執行,返回函數返回值

手寫apply:

Function.prototype.myApply = function(context = window, args = []) {
  context = context || window; // 參數默認值并不會排除null,所以重新賦值
  context.fn = this; // this是調用call的函數
  const result = context.fn(...args);
  delete context.fn;
  return result;
}
bind

Function.prototype.bind(this, arg1, arg2, …)
可以綁定this,并且傳入參數,方式與call相同,但是不會執行,返回已綁定this的新函數

手寫bind:

Function.prototype.myBind = function(context, ...args) {
  const _this = this;
  return function Bind(...newArgs) {
    // 考慮是否此函數被繼承
    if (this instanceof Bind) {
      return _this.myApply(this, [...args, ...newArgs])
    }
    return _this.myApply(context, [...args, ...newArgs])
  }
}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103448.html

相關文章

  • js函數this理解?手寫apply、callbind就夠了

    摘要:一是什么函數的內部屬性,引用的是函數據以執行的環境對象。函數做為節點事件調用時指向節點本身做為構造函數實力化方法時指向實例對象箭頭函數里的普通函數,由于閉包函數是執行的,所以指向箭頭函數的指向函數創建時的作用域。 一、this是什么? 函數的內部屬性,this引用的是函數據以執行的環境對象。也就是說函數的this會指向調用函數的執行環境。 function a(){ retur...

    Cciradih 評論0 收藏0
  • 手寫call、apply、bind函數

    摘要:函數特點可以改變我們當前函數的指向還會讓當前函數執行題目自測思路解析執行傳入三個參數函數內部執行傳入三個參數函數內部執行 call函數 特點: 1)可以改變我們當前函數的this指向 2)還會讓當前函數執行 Function.prototype.call = function (context) { if (typeof this !== function) { thro...

    gecko23 評論0 收藏0
  • 手寫call、applybind及相關面試題解析

    摘要:我是前端我的全名是我是一個前端指向接收多個參數,第一個是返回值返回值是一個函數上下文的,不會立即執行??吕锘嚓P講解請移步簡版的實現就算完成了歡迎吐槽點贊 它們有什么不同?怎么用? call 接收多個參數,第一個為函數上下文也就是this,后邊參數為函數本身的參數。 let obj = { name: 一個 } ...

    TwIStOy 評論0 收藏0
  • 手寫JavaScript中的bind方法

    摘要:如果綁定后的函數被了,那么此時指向就發生改變。構造函數上的屬性和方法,每個實例上都有。接下來聲明一個函數,在該中獲取了第二次傳的參數,并且返回了的執行。的又等于的實例。至此,就實現了自己的方法。 之前已經實現過了call,apply和new。今天順便把bind也實現下。首先: bind方法返回的是一個綁定this后的函數,并且該函數并沒有執行,需要手動去調用。(從這一點看bind函數...

    AZmake 評論0 收藏0
  • 面試題里的那些各種手寫

    摘要:最近準備初級前端面試,發現有很多手寫實現什么的,例如什么手寫實現,。后面以這道題為引線面試官可能會追問什么是執行上下文的判斷,的區別手寫一個函數實現斐波那契數列首先拷一個阮神在他教程里的一個寫法。 最近準備初級前端面試,發現有很多手寫實現什么的,例如什么手寫實現bind,promise。手寫ajax,手寫一些算法。翻閱了很多書籍和博客。 這里做一個總結改進,算是對我后面大概為期一個月找...

    wh469012917 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<