js apply和call

apply()和call()这两个方法的作用是一样的,都是在特定作用域中调用函数,等于设置函数体内this对象的只,以扩充函数赖以运行的作用域

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

Function.apply(obj,arguments)方法能接收两个参数

boj:这个对象将代替function累里this对象

argument:这个是数组,它将作为参数传给function

 

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

function.call(obj,[param1[,param2[,…[,paramN]]]])

obj:这个对象将代替function类里this对象

params:这是一个参数列表

 

1、apply示例

 

<script>
    //定义一个人类
    function Person(name,age){
        this.name = name,
        this.age = age
    }

    //定义一个学生类
    function Student(name,age,grade){
        Person.apply(this,arguments);
        this.grade = grade;
    }

    var student = new Student("zhangsan",21,"一年级");

    alert("name:"+student.name+"\n"+"age:"+student.age+"\n"+"grade:"+student.grade);
    //输出结果:name:zhangsan age:21 grade:一年级
</script>

 

分析:Person.apply(this,arguments);

this:在创建对象在这个时候代表的是student

argument:是一个数组,也就是["zhangsan",21,"一年级"];

也就是通俗一点讲就是:用student去执行Person这个类里面的内容,在Person这个类里面存在this.name等之类的语句,这样就讲属性创建到了student对象里面

 

2、call示例

在Student申述里面可以将apply修改为:Person.call(this,name,age)

 

 

当参数是数组类型,并且在调用Person的时候参数的列表是对应一致的(Person和Student的参数列表前两位是一致的)使用apply

如果Person的参数列表是(age,name),而Student的参数列表是(name,age,grade)使用call

 

在Math.max()中求数组的最大值

Math.max([param1,param2,...])这样是不支持数组的,但是他支持Math.max(param1,param2,...),这时我们可以使用Math.max.apply(null,array)

 

posted @ 2018-06-08 17:24  雨筠  阅读(158)  评论(0编辑  收藏  举报