美文网首页
我理解的call与apply的区别

我理解的call与apply的区别

作者: 有一个程序媛 | 来源:发表于2018-05-15 10:54 被阅读0次

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

          本文链接:https://www.haomeiwen.com/subject/aqdedftx.html