js的apply和call

apply和call的作用

callapply 都是用来修改函数中this的指向问题

例如:

B.apply(A, argArr);即A对象应用B对象的方法

B.call(A, args1,args2,...);即A对象调用B对象的方法

    function Person(name, age, sex, weight) {
      this.name = name;
      this.age = age;
      this.sex = sex;
      this.weight = weight;
    }
    Person.prototype.sayHi = function () {
      console.log("您好");
    };
    function Student(name,age,sex,weight,score) {
      //借用构造函数
      // >> 会引用Person中的内容
      // >> 一般来说,this总是指向调用某个方法的对象,但是使用call()和apply()方法时,就会改变this的指向
      // >> 此时Persion中的this指的是Student构造函数,所以Student中包含了Person中的属性,实现了继承
      Person.call(this,name,age,sex,weight);
      this.score = score;
    }
    var stu1 = new Student("小明",10,"男","10kg","100");
    console.log(stu1.name, stu1.age, stu1.sex, stu1.weight, stu1.score);

  

不同之处:

apply:最多只能有两个参数——新this对象和一个数组argArray。

call:它可以接受多个参数,第一个参数与apply一样,后面则是一串参数列表

实际上,apply和call的功能是一样的,只是传入的参数列表形式不同

    function Person(age,sex) {
      this.age=age;
      this.sex=sex;
    }
    //通过原型添加方法
    Person.prototype.sayHi=function (x,y) {
      console.log("您好啊:"+this.sex);
      return 1000;
    };
    var per=new Person(10,"男");
    per.sayHi();
​
    console.log("==============");
    function Student(name,sex) {
      this.name=name;
      this.sex=sex;
    }
    var stu=new Student("小明","人妖");
    // apply传参形式
    var r1=per.sayHi.apply(stu,[10,20]);
    // call传参形式
    var r2=per.sayHi.call(stu,10,20);
​
    console.log(r1);
    console.log(r2);

  

posted @ 2020-12-25 15:55  minnersun  阅读(102)  评论(0编辑  收藏  举报