zoukankan      html  css  js  c++  java
  • apply和call的使用和区别

    apply :

    Function.apply(obj, args)接收两个参数:

    obj: 改变Function的this指向,使其指向obj;

    args: 传入给函数的数组参数;

    call:

    Function.call(obj, param1, param2, param3...)

    obj: 改变Function的this指向,使其指向obj;

    args: 传入给函数的数组参数;

    实例:

    function add(c, d) {
        return this.a + this.b + c + d;
    }
    var strObj = { a: '今天', b: '天气'};
    console.log(add.apply(strObj, ['真', '好'])); // 今天天气真好
    console.log(add.call(strObj, '真', '好'));    // 今天天气真好

    apply和call的区别:

    • 参数的传入形式不同:

        apply的只有两个参数,第一个参数是this指向的对象,第二个参数是传入Funtion的参数组成的数组;

        call有一个及以上的参数, 第一个参数是this指向的对象,后面的参数均是传入Function的参数,有两个就是传给Function两个参数,有三个就是传了三个,有几个传几个;

    • 使用场景不同:

        若参数的形式是数组类型,且在调用时,参数的顺序一致(不出现乱换参数位置的情况),比如:父函数是Person(name, age) 子函数Student(name, age, grade),就可以使用apply;

        若参数顺序不一致,比如:父函数 Person(name, age)子函数 Student(age, name, grade),就可以使用call,指定参数对应值的位置(Student.call(this, name, age, grade));

    apply和call可用于继承

    function Class10(){
      this.showSub = function(a,b){
            alert(a - b);
        }   
    }
     
    function Class11(){
      this.showAdd = function(a,b){
            alert(a + b);
        }  
    }
     
    function Class12(){
      Class10.apply(this);
      Class11.apply(this);   
      // Class10.call(this);
      //Class11.call(this);  
    }
     
    var c2 = new Class12();
    c2.showSub(3,1);    //2
    c2.showAdd(3,1);    //4
  • 相关阅读:
    OSPF的简易模拟配置第二篇
    OSPF的简易模拟配置第一篇
    RIP简易配置第二篇
    linux常用命令集(压缩和归档操作-共16个)
    简易路由重分布配置
    linux常用命令集(磁盘和文件系统操作-共15个)
    简易的浮动静态路由配置
    神州数码DHCP及DHCP中继配置
    神州数码HSRP(热备份路由协议)配置
    神州数码策略路由(PBR)配置
  • 原文地址:https://www.cnblogs.com/zhizhi0810/p/11921408.html
Copyright © 2011-2022 走看看