call和apply应用区别
共同点
- 这两个方法都是函数对象的方法,需要通过函数对象来调用
- 当对函数调用call和apply都会执行
function fun(){
console.log(this);
}
fun()//window
fun.call()//window
fun.apply()//window
//以上写法是等价的
- 在调用call和apply()可以将一个对象指定为第一个参数,此时this指向这个对象
function fun(){
console.log(this);
}
let obj ={
name:'zs'
}
//改变this的指向
fun.call(obj)//obj
fun.apply(obj)//obj
区别
当函数需要进行传参时,call()方法可以将参数在对象之后依次传递
apply()方法需要将实参封装到一个数组中传递
function fun(a,b){
console.log('a='+a+'b='+b)
}
let obj ={
name:'zs'
}
fun.call(obj,1,2)
fun.apply(obj,[1,2])