call apply bind三者之間的用法和區別

2021-10-10 07:04:11 字數 2013 閱讀 8600

1. 呼叫方法

let xw =

}let xh =

let xl =

xw.say();

// this還是原來的xw的

xw.say.

call

(xh)

;// this指向xh

xw.say.

(xl)

;// this指向xl

xw.say.

bind

(xh)()

;// this指向xh

2. 傳參方法

let xw =

}let xh =

let xl =

xw.say(

"實驗小學"

,"六年級");

xw.say.

call

(xh,

"實驗小學"

,"六年級");

xw.say.

(xl,

["實驗小學"

,"六年級"])

; xw.say.

bind

(xh,

"實驗小學"

,"六年級")(

);xw.say.

bind

(xl)

("實驗小學"

,"六年級"

);

bind()和其他兩個方法的作用也是一致的,只是該方法會返回乙個函式,並且可以通過bind()實現

手寫實現 call()

function.prototype.

mycall

=function

( context )

// 測試用例

const obj =

function

fn(name , age)

}let res = fn.

mycall

(obj ,

'll',25

);console.

log(res)

//

function.prototype.

=function

( context , args )

else

delete context.fn;

return result;

}// 測試用例

const obj =

function

fn(name , age)

}let res = fn.

(obj ,

['ll',25

]);console.

log(res)

//

手寫實現 bind()

function.prototype.

mybind

=function

( context )

// 2. 暫存this

const self =

this

;// 3. 獲取傳入的引數

// 拿到第一組引數,如果沒傳,是乙個空陣列

const args1 =

[...arguments]

.slice(1

);// 第二次呼叫bindfn

const

bindfn

=function()

return bindfn

}// 測試用例

const obj =

function

fn(name , age)

}let res = fn.

mybind

(obj)

('hh',30

);console.

log(res)

STRCPY,MEMSET,MEMCPY三者的區別

memset 用來對一段記憶體空間全部設定為某個字元,一般用在對定義的字串進行初始化為 或 0 例 char a 100 memset a,0 sizeof a memcpy 用來做記憶體拷貝,你可以拿它拷貝任何資料型別的物件,可以指定拷貝的資料長度 例 char a 100 b 50 memcpy...

View,Activity,Window三者的關係

在activity中,通過setcontentview就可以顯示xml的布局檔案了,也就是把乙個個view控制項組合在一起,首先,這個activity的方法setcontentview有三個過載的方法。public void setcontentview int layoutresid public...

Activity Window View三者的關係

首先分別介紹下這三者 然後一句話介紹下三者的關係 activity通過window來實現檢視元素的展示,window可以理解為乙個容器,盛放著乙個個的view,用來執行具體的展示工作。當我們執行程式的時候 在activity中呼叫attach,建立了乙個window 建立的window是其子類pho...