之前面试的时候被问过几次call和apply函数的问题;今天就自己总结一下
call和apply这两个函数的主要作用就是改变调用方法的对象,具体可以说改变this的指向。两者最主要的区别就是call函数第二个参数可以是任意类型,而apply函数的第二个参数必须为数组。
1.call([thisObj[,arg1[,arg2[, argN]]]])
调用一个对象的方法,以另一个对象调用该方法,如果为空,则使用Global对象调用方法。
2.apply(thisObj[,argArray])
其中argArray为数组,如若为空,则使用Global调用
例子:
function people(){
this.name="people";
this.show=function(){
console.log(this.name);}
}
function friend(){
this.name="xiaoming"
}
var pel=new people();
var fre=new friend();
pel.show.apply(fre,[]);
该例子pel调用了他自身的函数show,但是通过apply是fre执行该方法,所以输出为xiaoming
通过call和apply可以实现继承,可以参看以下的例子:
function car(name){
this.name=name;
this.drive=function(){
console.log(this.name);
}
}
function Audi(name){
car.call(this,name);
}
var audi=new Audi("audi A8");
audi.drive();
通过使用call函数可以使Audi调用car中的方法,从而实现继承。