call(), apply(), bind()三個(gè)方法屬于函數(shù)的內(nèi)建函數(shù),任何一個(gè)函數(shù)都可以調(diào)用這三個(gè)方法谊迄;
通過(guò)這三個(gè)方法中的任何一個(gè)闷供,可以改變某個(gè)函數(shù)運(yùn)行時(shí)的上下文(context)⊥撑担可以理解為改變函數(shù)體內(nèi)部 this 的指向歪脏。
接下來(lái)分別介紹這三個(gè)方法的使用:
call
使用一個(gè)指定的 this 值和單獨(dú)給出的一個(gè)或多個(gè)參數(shù)來(lái)調(diào)用一個(gè)函數(shù);
語(yǔ)法:
/*
thisArg: 函數(shù)運(yùn)行時(shí)指定的 this 值,
當(dāng)thisArg的值為:undefined 或者 null粮呢,this = window
當(dāng)thisArg的值為: number 或者 boolean 或者 string, this為對(duì)應(yīng)的包裝類(lèi)唾糯,如new Number(), new Boolean(), new String()
arg1, arg2, ...:參數(shù)列表,參數(shù)通過(guò)逗號(hào)隔開(kāi)
*/
fun.call(thisArg, arg1, arg2, ...)
apply
調(diào)用一個(gè)具有給定this
值的函數(shù)怠硼,以及作為一個(gè)數(shù)組(或類(lèi)數(shù)組對(duì)象)提供的參數(shù)。
語(yǔ)法:
/*
thisArg: 函數(shù)運(yùn)行時(shí)指定的 this 值移怯,
當(dāng)thisArg的值為:undefined 或者 null香璃,this = window
當(dāng)thisArg的值為: number 或者 boolean 或者 string, this為對(duì)應(yīng)的包裝類(lèi),如new Number(), new Boolean(), new String()
argsArray:參數(shù)數(shù)組,參數(shù)通過(guò)數(shù)組裝起來(lái)
*/
func.apply(thisArg, [argsArray])
bind
創(chuàng)建一個(gè)新的函數(shù)
語(yǔ)法:跟call()方法是一樣的舟误。
返回值:返回一個(gè)原函數(shù)的拷貝葡秒,并擁有指定的this值和初始參數(shù)。
簡(jiǎn)單示例:
var name = "OutterName";
var obj = {
name: 'ObjName',
}
function printName(age) {
console.log("my name is " + this.name + ",age = " + age);
}
printName.call(null, 20);
printName.apply(obj, [21]);
printName.bind(obj)(22);
結(jié)果:
注意:call()方法的作用和 apply() 方法類(lèi)似嵌溢,區(qū)別就是call()方法接受的是參數(shù)列表眯牧,而apply()方法接受的是一個(gè)參數(shù)數(shù)組。
更多的方法赖草,在后續(xù)用到的時(shí)候学少,在進(jìn)行補(bǔ)充;