(1)call方法:
語法:
fun.call(thisarg, arg1, arg2, ...)
call( ) 方法在使用乙個指定的this值和若干個指定的引數值的前提下呼叫某個函式或方法。
當呼叫乙個函式時,可以賦值乙個不同的 this 物件。this 引用當前物件,即 call 方法的第乙個引數。
需要注意的是,指定的this值並不一定是該函式執行時真正的this值,如果這個函式處於非嚴格模式下,則指定為null和undefined的this值會自動指向全域性物件(瀏覽器中就是window物件),同時值為原始值(數字,字串,布林值)的this會指向該原始值的自動包裝物件。
使用call方法呼叫函式並指定上下文'this':
呼叫其它物件的方法完成對自身的操作:
語法:需要注意的是,指定的 this 值並不一定是該函式執行時真正的 this 值,如果這個函式處於非嚴格模式下,則指定為 null 或 undefined 時會自動指向全域性物件(瀏覽器中就是window物件),同時值為原始值(數字,字串,布林值)的 this 會指向該原始值的自動包裝物件。argsarray是乙個陣列或者類陣列物件,其中的陣列元素將作為單獨的引數傳給 fun 函式。如果該引數的值為null 或undefined,則表示不需要傳入任何引數。
例子:
使用math.max/math.min來找出乙個陣列中的最大/最小值
分享一些常用的用法:
陣列之間追加
獲取陣列中的最大值和最小值
驗證是否是陣列(前提是tostring()方法沒有被重寫過)
(3)bind方法:
語法:
fun.bind(thisarg[, arg1[, arg2[, ...]]])
bind() 函式會建立乙個新函式(稱為繫結函式),新函式與被調函式(繫結函式的目標函式)具有相同的函式體。當新函式被呼叫時 this 值繫結到 bind() 的第乙個引數,該引數不能被重寫。繫結函式被呼叫時,bind() 也接受預設的引數提供給原函式。乙個繫結函式也能使用new操作符建立物件:這種行為就像把原函式當成構造器。提供的 this 值被忽略,同時呼叫時的引數被提供給模擬函式。
例子:
ps: 在fun函式執行時指定的this值。需要注意的是下面幾種情況:
(1)不傳,或者傳null,undefined,函式中的this指向window物件 。
(2)傳遞另乙個函式的函式名,函式中的this指向這個函式的引用,並不一定是該函式執行時真正的this值 。
(3)值為原始值(數字,字串,布林值)的this會指向該原始值的自動包裝物件,如 string、number、boolean 。
(4)傳遞乙個物件,函式中的this指向這個物件。
三者都是用來改變函式的this物件的指向的。
三者第乙個引數都是this要指向的物件,也就是想指定的上下文,上下文就是指呼叫函式的那個物件。
apply call bind 使用總結
參考 語法 語法 fun.call thisarg arg1 arg2 var a var b a.fn 接受的是乙個陣列var a var b a.fn 接受的是引數 b.call a,1,2 3var a var b a.fn b.bind a,1,2 以上code我們會發現並沒有輸出.bind...
apply,call,bind個人總結
首先他們是用來改變呼叫方法中this的指向的,而且他們都是function的prototype。分別為 function.prototype.call function.prototype.bind 引數1 thisarg 物件也就是需要指向this的物件 引數2 argsarray 陣列 會按對應...
手動實現apply call bind
window.a 1 定義乙個全域性變數 var obj 定義乙個物件用來繫結 var funct function b,c 定義乙個函式用來執行 funct 1,2 1 1 2 直接執行,相當於window.funct 1,2 this繫結於window base base window 傳遞繫結...