• 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+"
    "+"age:"+student.age+"
    "+"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)

  • 相关阅读:
    还零钱
    递归与动态规划II-汉诺塔
    leetcode 95. Unique Binary Search Trees II
    技术实力详解
    正反向路由
    usermod命令、用户密码管理、mkpasswd命令
    作为阿里的面试官,我有话想说。
    [招聘] 阿里巴巴-淘系技术部,长期内推,专人跟进。
    Vue源码翻译之渲染逻辑链
    Vue源码翻译之组件初始化。
  • 原文地址:https://www.cnblogs.com/YAN-HUA/p/9156736.html
Copyright © 2020-2023  润新知