
call有两个妙用:


区别:call和apply的区别在于call的第二个参数可以是任意类型,而apply的第二个参数必须是数组或者arguments
<script>
//一般来说,this总是指向调用某个方法的对象,但是使用call()和apply()方法时,就会改变this的指向。
/*
call方法:
语法:call(thisObj,arg1,arg2,……,argN)
定义:调用一个对象的一个方法,以另一个对象替换当前对象
参数
thisObj;可选项,将被用作当前对象的对象
arg1,arg2,……,argN;可选项,将被传递方法参数序列
说明
call方法可以用来代替另一个对象调用一个方法。call方法可将一个函数的对象上下文从初始的上下文改变为有thisObj指定的新对象。
如果没有提供thisObj参数,那么Global对象被用作thisObj
*/
/*
apply方法:
语法:apply(thisObj,[arg1,arg2,……,argN])
定义:应用某一个对象的一个方法,用另一个对象替换当前对象
*/
//区别:call和apply的区别在于call的第二个参数可以是任意类型,而apply的第二个参数必须是数组或者arguments
//1.
function add(a,b) {
console.log(a+b);
}
function sub(a,b) {
console.log(a-b);
}
add.call(sub,3,1);//用add来替换sub,add.call(sub,3,1)==add(3,1),结果是console.log(4);
//2.
function Animal(){
this.name="Animal";
this.showName=function(){
alert(this.name);
}
}
function Cat(){
this.name="Cat";
}
var animal=new Animal();
var cat=new Cat();
animal.showName.call(cat);
// 通过call或者apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用。总结
