zoukankan      html  css  js  c++  java
  • call 和 apply -- javascript

    apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性.  
    Function.apply(obj,args)方法能接收两个参数  

      obj:这个对象将代替Function类里this对象  
      args:这个是数组,它将作为参数传给Function(args-->arguments)  
     --- 貌似可以这么理解: obj暂时身兼数职,兼任Function里的this,并获得了赋值和方法,并和本身的属性和方法合并extend

    function Person(name,age) {   
        this.name=name; this.age=age;   
    }   
     /*定义一个学生类*/   
    functionStudent(name,age,grade) {   
        Person.apply(this,arguments); this.grade=grade;   
    }   
    //创建一个学生类   
    var student=new Student("qian",21,"一年级");   
    //测试   
    alert("name:"+student.name+"
    "+"age:"+student.age+"
    "+"grade:"+student.grade);   
    //大家可以看到测试结果name:qian age:21 grade:一年级   
    //学生类里面我没有给name和age属性赋值啊,为什么又存在这两个属性的值呢,这个就是apply的神奇之处.   

    什么情况下用apply,什么情况下用call  

    1. 在给对象参数的情况下,如果参数的形式是数组的时候,比如apply示例里面传递了参数arguments,这个参数是数组类型,并且在调用Person的时候参数的列表是对应一致的(也就是Person和Student的参数列表前两位是一致的) 就可以采用 apply , 如果我的Person的参数列表是这样的(age,name),而Student的参数列表是(name,age,grade),这样就可以用call来实现了,也就是直接指定参数列表对应值的位置(Person.call(this,age,name,grade));  

    http://blog.csdn.net/business122/article/details/8000676

  • 相关阅读:
    datasnap 2010 为DataSnap系统服务程序添加描述
    uLanguage.pas
    cxgrid上如何取FOOTER上合计的值
    cxgrid经典用法
    datasnap 2010 DataSnap服务端和客户端发布分发方法
    php_network_getaddresses: getaddrinfo failed 原因
    查看crontab运行状态
    laravel 开启定时任务需要操作
    解决cron不执行的问题
    UPdate语句
  • 原文地址:https://www.cnblogs.com/qinqiu/p/5048403.html
Copyright © 2011-2022 走看看