相同點(diǎn):
作用都是為了改變函數(shù)運(yùn)行時(shí)上下文而存在的。
即改變函數(shù)體內(nèi)部this的指向留晚。
"說(shuō)白點(diǎn),a有xx方法侵续,b沒有倔丈。b可以問(wèn)a借!"
不同點(diǎn):
接受參數(shù)方式不一樣状蜗。
call接受的是連續(xù)參數(shù)需五,apply接受的是數(shù)組參數(shù)。
A.call(this, a,b,c,d)
A.apply(this, [a,b,c,d])
繼承使用:
通過(guò)call和apply轧坎,我們可以實(shí)現(xiàn)對(duì)象繼承
var Parent = function(){
this.name = "xsf";
this.age = 22;
}
var child = {};
Parent.call(child); // child向Parent借
console.log(child);
調(diào)用父構(gòu)造函數(shù):
apply
var arr1 = [1,2];
var arr2 = [3,4];
Array.prototype.push.apply(arr1,arr2); // [1,2,3,4]
把a(bǔ)rr2 push進(jìn)arr1
相當(dāng)于:
arr2.forEach(function(value){
arr1.push(value);
)
call
var arr1 = [1,2];
var arr2 = [3,4];
var arr3 = [2,4];
Array.prototype.push.call(arr1,arr3,arr3); // [1,2,[3,4],[2,4]]不會(huì)拆分?jǐn)?shù)組元素
非常實(shí)用的小技巧
求數(shù)組中的最大最小值宏邮,var arr = [22,3,24,54,65];
Math.max.apply(null, arr); // 65
Math.min.apply(null, arr); // 3
用call
就不行了,以上利用了apply
的傳參特性缸血!