教你如何手寫call apply bind函式

2021-10-10 16:52:19 字數 1208 閱讀 2142

function.prototype.

mycall

=function

(context)

//獲取引數

let args=

[...arguments]

.slice(1

),result=

null

;//判斷context是否傳入,如果未傳入則設定未window

context=context||window;

//將呼叫函式設為物件的方法

context.fn=

this

;//呼叫函式

result=context.fn(

...args)

;//將屬性刪除

delete context.fn;

return result;

}

call 函式的實現步驟:

1.判斷呼叫物件是否為函式,即使我們是定義在函式的原型上的,但是可能出現使用 call 等方式呼叫的情況。

2.判斷傳入上下文物件是否存在,如果不存在,則設定為 window。

3.處理傳入的引數,擷取第乙個引數後的所有引數。

4.將函式作為上下文物件的乙個屬性。

5.使用上下文物件來呼叫這個方法,並儲存返回結果。

6.刪除剛才新增的屬性。

7.返回結果。

function.prototype.

=function

(context)

let result=

null

; context=context||window;

context.fn=

this;if

(arguments[1]

)else

delete context.fn;

return result;

}

function.prototype.

mybind

=function

(context)

var args=

[...arguments]

.slice(1

),fn=

this

;return

functionfn(

)}

手寫 call apply 及 bind 函式

function.prototype.mycall function context context context window context.fn this 建立fn屬性,並將值設定為需要呼叫的函式 const args arguments slice 1 因為call可以傳入多個引數作為呼叫...

教你如何對齊!

之前利用這個框架修改公司頁面的時候,老是不對齊,經常被老闆罵了個狗血淋頭,想了兩三天沒想到好的辦法解決。本以為解決不了,後面不小心在官網看到了一小段文字後,才發現對齊如此的簡單。你只要調整行外邊距就可以隨意擴大你的最外層div。從而對齊上下文。大小什麼的,可以等對齊以後再進行製作。這樣重新上傳之後,...

教你如何減壓

我們都曾經歷過因為工作而引起的壓力,人人都逃不掉。我們可能會感到工作壓力很大,或者擔心我們的職位 我們為工作中的衝突或誤解煩惱 我們也可能發現工作難度太高,或根本沒有挑戰性。除了直接由工作帶來的壓力外,其他生活上的問題也會讓我們焦慮或擔憂,如孩子上學,父母生病,生活拮据和缺少休息時間。如果我們不能正...