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...