首页 > 代码库 > apply & call

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+"\n"+"age:"+student.age+"\n"+"grade:"+student.grade);17     //大家可以看到测试结果name:qian  age:21  grade:一年级18     //学生类里面我没有给name和age属性赋值啊,为什么又存在这两个属性的值呢,这个就是apply的神奇之处.