這三個函數(shù)的作用都是將函數(shù)綁定到上下文中侵俗,用來改變函數(shù)中this的指向诬像;三者的不同點在于語法的不同
fun.call(thisArg[, arg1[, arg2[, ...]]])
fun.apply(thisArg, [argsArray])
所以apply和call的區(qū)別是call方法接受的是若干個參數(shù)列表,而apply接受的是一個包含多個參數(shù)的數(shù)組
而bind的()方法創(chuàng)建一個新的函數(shù)嫡意,當(dāng)被調(diào)用時怎茫,將其this關(guān)鍵字設(shè)置為提供的值,在調(diào)用新的函數(shù)是歼捐,在任何提供之前提供一個給定的參數(shù)序列。
var bindFn = fun.bind(thisArg[, arg1[, arg2[, ...]]])
bindFn()
例子:
var name = 'window';
var sayName = function (param) {
? ? console.log('my name is:' + this.name + ',my param is ' + param)
};
//my name is:window,my param is window param
sayName('window param')
var callObj = {
? ? name: 'call'
};
//my name is:call,my param is call param
sayName.call(callObj, 'call param');
var applyObj = {
? ? name: 'apply'
};
//my name is:apply,my param is apply param
sayName.apply(applyObj, ['apply param']);
var bindObj = {
? ? name: 'bind'
}
var bindFn = sayName.bind(bindObj, 'bind param')
//my name is:bind,my param is bind param
bindFn()