大家在平常代码或者面试的时候是不是会经常遇到call和apply
1.我们先来看一个apply的示例:
//定义女生类
function Girl(hair,sex){
this.hair = hair;
this.sex = sex;
}
//定义女士类
function Women(hair,sex,age){
Girl.apply(this,arguments);
this.age = age;
}
//创建一个女士类
var women=new Women("lang",女,"23岁");
//测试
alert("hair:"+women.hair+"\n"+"sex:"+women.sex+"\n"+"age:"+women.age);
//测试结果hair:lang sex:"女" age:"23岁"
//女士类里面我们并没有给hair和sex属性赋值,为什么又存在这两个属性的值呢,这个就是apply的神奇之处.
分析: Girl.apply(this,arguments);
this:在创建对象在这个时候代表的是women
arguments:是一个数组,也就是["lang",女,"23岁"];
也就是通俗一点讲就是:用women去执行Girl这个类里面的内容,在Girl这个类里面存在this.hair等之类的语句,这样就将属性创建到了women对象里面
2.什么情况下用call呢?
如果Women的参数列表时(hair,sex,age)跟Girl的参数列表(hair,sex)相同属性的先后位置是一样的,我们用apply
如果Women的参数列表时(sex,hair,age)跟Girl的参数列表(hair,sex)相同属性的先后位置不一样,我们用call,也就是直接指定参数列表对应值的位置(Girl.call(this,hair,sex,age));
。。。。。。这就是call和apply的区别啦
网友评论