摘要:可以改變,并且傳入參數,立刻執行,返回函數返回值手寫參數默認值并不會排除,所以重新賦值是調用的函數執行后刪除新增屬性可以改變,并且傳入參數,與不同的是,傳入的參數是數組或類數組,立刻執行,返回函數返回值手寫參數默認值并不會排除,所以重新賦值
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
摘要:一是什么函數的內部屬性,引用的是函數據以執行的環境對象。函數做為節點事件調用時指向節點本身做為構造函數實力化方法時指向實例對象箭頭函數里的普通函數,由于閉包函數是執行的,所以指向箭頭函數的指向函數創建時的作用域。 一、this是什么? 函數的內部屬性,this引用的是函數據以執行的環境對象。也就是說函數的this會指向調用函數的執行環境。 function a(){ retur...
摘要:函數特點可以改變我們當前函數的指向還會讓當前函數執行題目自測思路解析執行傳入三個參數函數內部執行傳入三個參數函數內部執行 call函數 特點: 1)可以改變我們當前函數的this指向 2)還會讓當前函數執行 Function.prototype.call = function (context) { if (typeof this !== function) { thro...
摘要:我是前端我的全名是我是一個前端指向接收多個參數,第一個是返回值返回值是一個函數上下文的,不會立即執行??吕锘嚓P講解請移步簡版的實現就算完成了歡迎吐槽點贊 它們有什么不同?怎么用? call 接收多個參數,第一個為函數上下文也就是this,后邊參數為函數本身的參數。 let obj = { name: 一個 } ...
摘要:如果綁定后的函數被了,那么此時指向就發生改變。構造函數上的屬性和方法,每個實例上都有。接下來聲明一個函數,在該中獲取了第二次傳的參數,并且返回了的執行。的又等于的實例。至此,就實現了自己的方法。 之前已經實現過了call,apply和new。今天順便把bind也實現下。首先: bind方法返回的是一個綁定this后的函數,并且該函數并沒有執行,需要手動去調用。(從這一點看bind函數...
摘要:最近準備初級前端面試,發現有很多手寫實現什么的,例如什么手寫實現,。后面以這道題為引線面試官可能會追問什么是執行上下文的判斷,的區別手寫一個函數實現斐波那契數列首先拷一個阮神在他教程里的一個寫法。 最近準備初級前端面試,發現有很多手寫實現什么的,例如什么手寫實現bind,promise。手寫ajax,手寫一些算法。翻閱了很多書籍和博客。 這里做一個總結改進,算是對我后面大概為期一個月找...
閱讀 763·2019-08-29 12:49
閱讀 3550·2019-08-29 11:32
閱讀 3433·2019-08-26 10:43
閱讀 2402·2019-08-23 16:53
閱讀 2047·2019-08-23 15:56
閱讀 1695·2019-08-23 12:03
閱讀 2767·2019-08-23 11:25
閱讀 2084·2019-08-22 15:11