這三個方法都是寫到Function對象的原型上的,也就是寫到Function.prototype上的产舞;其中bind方法是ES5里新增的魂奥。
bind方法
bind方法第一個參數(shù)是指定this,其他是直接傳遞給函數(shù)的參數(shù)易猫。
用來固定某個函數(shù)的this和參數(shù)并返回一個函數(shù)等待后續(xù)調(diào)用耻煤。
function demo(a, b) {
console.log(this, a, b);
}
let fn = demo.bind("this is bind", 12) // 沒有任何輸出,說明沒有執(zhí)行
fn() // "this is bind" 12 undefined
fn(10) // "this is bind" 12 10
// bind方法可以在需要的時候再調(diào)用准颓,也可以在調(diào)用的時候再添加參數(shù)哈蝇,并且原有的參數(shù)也不會被覆蓋。
call方法
call 方法第一個參數(shù)是指定this攘已,其他是直接傳遞給函數(shù)的參數(shù)
demo.call("this is call",1) // "this is call" 1 undefined
demo.call("this is call", 1, 2) // "this is call" 1 2
//call方法是在指定this 和參數(shù)后立即調(diào)用這個函數(shù)
apply方法
apply方法第一個參數(shù)是指定this炮赦,第二個參數(shù)是傳遞給函數(shù)的參數(shù)的的數(shù)組;apply方法只有兩個參數(shù)样勃。
可以用于不知道參數(shù)個數(shù)的場景
demo.apply("this is apply", [1]) // "this is apply" 1 undefined
demo.apply("this is apply", [1,2]) // "this is apply" 1 2
// apply方法也是在指定this和參數(shù)后立即調(diào)用
總結(jié)
call和apply方法都是在指定this和參數(shù)后立即執(zhí)行吠勘,區(qū)別是傳遞給函數(shù)的參數(shù)形式不一樣;bind方法是在指定this和參數(shù)后返回一個函數(shù)峡眶,什么時候需要調(diào)用了再調(diào)用剧防,并且可以在調(diào)用的時候添加參數(shù),其他的和call方法一樣