這兩個函數(shù)都是函數(shù)的方法,只有函數(shù)能夠打點call() apply(),表示指定的上下文執(zhí)行這個函數(shù)
function fun(){
alert(this.age);
}
var obj ={
"name":"小明";
"age": 12
}
fun(); //undefined
下面有一個函數(shù)fun翘狱,我們現(xiàn)在就是耍無賴,必須讓fun里面的this是obj,此時可以用call,apply來指定上下文砰苍。
function fun(){
alert(this.age);
}
var obj ={
"name":"小明";
"age": 12;
"f":fun
}
obj.f(); //12
fun.call(obj); //12
fun.apply(obj);
語法:
函數(shù).call(上下文)
函數(shù).apply(上下文)
兩個函數(shù)的區(qū)別是潦匈,體現(xiàn)在參數(shù)上
此時我們要執(zhí)行的fun函數(shù)可以接受參數(shù)阱高,apply需要用數(shù)組體現(xiàn)這些參數(shù),而call必須用逗號隔開茬缩,錄取期間所有參數(shù):
function fun(a,b,c){
alert(a+b+c)
alert(this.age);
}
var obj ={
"name":"小明";
"age": 12;
"f":fun
}
fun.call(obj,6,7,8);
fun.apply(obj,[6,7,8]);
沒有別的區(qū)別了赤惊,就是傳參數(shù)的區(qū)別
有什么用?看看求數(shù)組的最大值
我們知道Math.max()方法凰锡,只接受單獨羅列的參數(shù):
Math.max(4,55,88,34,789,21) //789
不能傳入數(shù)組
Math.max([4,55,88,34,789,21]) //NaN
所以此時可以妙用apply,apply可以接受一個數(shù)組當(dāng)做函數(shù)的“羅列”的參數(shù)
Math.max.apply(window,[4,55,88,34,789,21]) //789