我理解的call与apply的区别

大家在平常代码或者面试的时候是不是会经常遇到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的区别啦

你可能感兴趣的:(我理解的call与apply的区别)