apply、call学习记录

apply与call的区别

apply

apply方法能劫持另外一个对象的方法,继承另外一个对象的属性.

Function.apply(obj,args)方法能接收两个参数
obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传给Function(args-->arguments)

call:和apply的意思一样,只不过是参数列表不一样.

Function.call(obj,[param1[,param2[,…[,paramN]]]])
obj:这个对象将代替Function类里this对象
params:这个是一个参数列表

apply与call用法

apply用到的地方,在一个数组中寻找最大值?
原生的方法是 Math.max(1,2,3,4);Math.max并不能直接接收一个数组,那么就可以像下面这样写:

    Math.max([1,2,3]);//NAN 这是错误写法
    // 下方才是正确的
    var maxApply = function(arr){
        return Math.max.apply(this, arr);
    }
    maxApply([1,2,3,4,5]); // 5

call 用法

      function Person(name, age){
          this.name = name;
          this.age = age;
      }
      function Student(name,age, grade){
          Person.call(this,name,age);
          // 传指定参数这种就可以用call
          this.grade = grade;
      }
      var student = new Student('张三', 18, '五年级');
      console.log('Student:', student.name); // 张三
      console.log('Student:', student.age); // 18
      console.log('Student:', student.grade); // 五年级

在给对象参数的情况下,如果参数的形式是数组的时候,比如apply示例里面传递了参数arguments,这个参数是数组类型,并且在调用Person的时候参数的列表是对应一致的(也就是Person和Student的参数列表前两位是一致的) 就可以采用 apply.
如果我的Person的参数列表是这样的(age,name),而Student的参数列表是(name,age,grade),这样就可以用call来实现了,也就是直接指定参数列表对应值的位置(Person.call(this,age,name,grade));

未经允许不得转载:小小程序员 » apply、call学习记录

赞 (1)

评论 0