call apply bind方法詳解

2021-09-16 13:41:38 字數 2671 閱讀 4618

var name =

'window'

;var newthis =

;function

showname

(info1, info2)

showname

('a'

,'b');

//輸出:window a b

// 通過bind改變this指向

var newshowname = showname.

bind

(newthis,

'hello'

,'world');

newshowname()

;//輸出:newthis hello world

var name =

'window'

;var newthis =

;function

showname

(info1, info2)

showname

('a'

,'b');

//輸出:window a b

//通過call改變this指向

showname.

call

(newthis,

'hello'

,'world');

//輸出:newthis hello world

var name =

'window'

;var newthis =

;function

showname

(info1, info2)

showname

('a'

,'b');

//輸出:window a b

showname.

(newthis,

['hello'

,'world'])

;//輸出:newthis hello world

bind 會返回乙個函式,可以在之後任意時間呼叫。

bind傳遞引數問題:

在通過bind改變this指向的時候所傳入的引數會拼接在呼叫返回函式所傳引數之前,多餘引數不起作用。

var newshowname = showname.

bind

(newthis,

'hello');

//在通過bind改變this指向的時候只傳了「hello」乙個引數,

//在呼叫newshowname這個返回引數的時候,bind傳參拼接在其前

newshowname

('world');

//輸出:newthis hello world

var newshowname = showname.

bind

(newthis,

'hello');

//在通過bind改變this指向的時候只傳了「hello」乙個引數,

//在呼叫newshowname這個返回引數的時候,bind傳參拼接在其前,

//這時newshowname的引數為「hello」,「a」,「world」

//而該函式只需要兩個引數,則第三個引數被忽略

newshowname

('a'

,'world');

//輸出:newthis hello a

bind傳入的引數和newshowname方法傳入的引數會拼接在一起,一齊傳給showname方法。

bind無法改變建構函式的this指向

var name =

'window'

;var newthis =

;function

showname

(info1, info2)

showname

('a'

,'b');

//輸出:window a b

// 通過bind改變this指向

var newshowname = showname.

bind

(newthis,

'hello'

,'1'

,'2');

newshowname

('a'

,'world');

//輸出:newthis hello world

console.

log(

newnewshowname()

.constructor)

;//輸出:showname函式體

可以看出,通過bind改變this指向返回函式的構造器還是最開始的showname函式。

new newshowname()例項化了乙個新的方法,這個方法的this也不再指向newthis。

function.prototype.

newbind

=function

(target)

;varf=

function()

; temp.prototype = self.prototype;

f.prototype =

newtemp()

;return f;

};

call, apply, bind方法詳解

function a x,y var c a.call c,5,6 5 6 arguments 5,6 再看例子 function person age,male var person1 person.call person1,20,female person1 var person var per...

call apply bind 方法用法測試

call 1 use strict function test xx,yy let a 呼叫test方法,將 a 放到方法裡當作 this。所以裡列印a才會有值的。test.call a,10,20 console.log a 3 use strict function test xx,yy let...

call apply bind方法及其應用

1 call 方法可以呼叫乙個函式 functionfn fn.call window2 call 方法可以改變函式的this指向 var o function fn x,y 利用call方法後this指向了o這個物件 fn.call o,1,2 call方法總結 var o function fn...