apply & call

一。意义

function.apply(obj,args)

obj代替function里this对象

args作为参数传给function

二。实例

1. obj代替function里this对象

1     function f(){
2          alert(this.x + this.y);
3     }
4      var obj = {x:1,y:2};
5      f.call(obj);         //3

2. API应用

    Math.max(param1,param2,param3…) :实现得到数组中最大的一项

问题:max不支持数组参数

解决:根据apply的特点来解决

var max=Math.max.apply(null,array)

 这块在调用的时候第一个参数给了一个null,这个是因为没有对象去调用这个方法,我只需要用这个方法帮我运算,得到返回的结果就行,

所以直接传递了一个null过去。undefine是未定义的对象 ,null是定义的对象, 但是没有实例,可以理解为null是defined了的obj。

 

3. 继承 

 1 /*定义一个人类*/
 2     function Person(name,age)
 3     {
 4         this.name=name;
 5         this.age=age;
 6     }
 7     /*定义一个学生类*/
 8     functionStudent(name,age,grade)
 9     {
10         Person.apply(this,arguments);
11         this.grade=grade;
12     }
13     //创建一个学生类
14     var student=new Student("qian",21,"一年级");
15     //测试
16     alert("name:"+student.name+"
"+"age:"+student.age+"
"+"grade:"+student.grade);
17     //大家可以看到测试结果name:qian  age:21  grade:一年级
18     //学生类里面我没有给name和age属性赋值啊,为什么又存在这两个属性的值呢,这个就是apply的神奇之处.
原文地址:https://www.cnblogs.com/yuyutianxia/p/3840335.html