javascript call和apply区别

一.方法定义

  1. call方法:

    • a.call(b,arg1,arg2..)就是a对象的方法应用到b对象

      实例:

      function add(a,b)
      {
      alert(a+b);
      }
      function reduce(a,b)
      {
      alert(a-b);
      }
      add.call(reduce,1,3) //将add方法运用到reduce,结果为4

    • call可以改变this指向

      实例:

      function Animal()
      {
      this.name=”animal”;
      this.showName=function()
      {
      alert(this.name)
      }
      }
      function Cat()
      {
      this.name=”cat”;
      }
      var animal = new Animal();
      var cat = new Cat();
      animal.showName(); //结果为animal
      animal.showName.call(cat); //原本cat没有showName方法,但是通过call方法将animal的showName方法应用到cat上,因此结果为cat

    • 实现继承

      实例:

      function Animal(name)
      {
      this.name=name;
      this.showName=function()
      {
      alert(this.name)
      }
      }
      function Cat(name)
      {
      Animal.call(this,name); //将Animal应用到Cat上,因此Cat拥有了Animal的所有属性和方法
      }
      var cat = new Cat(“Black Cat”);
      cat.showName(); //浏览器弹出Black Cat

  2. apply用法

    • apply和call的用法只有一个地方不一样,除此之外,其他地方基本一模一样

    a.call(b,arg1,arg2…)

    • apply(b,[arg1,arg2]) //apply只有2个参数,它将call的参数(arg1,arg2…)放在一个数组中作为apply的第二参数