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

    相同点:

    都能够改变方法的执行上下文(执行环境),将一个对象的方法交给另一个对象来执行,并且是立即执行

    不同点:

    call方法从第二个参数开始可以接收任意个参数,每个参数会映射到相应位置的func的参数上,可以通过参数名调用,但是如果将所有的参数作为数组传入,它们会作为一个整体映射到func对应的第一个参数上,之后参数都为空

    列子:

    function func (a, b, c) {};
    
    func.call(obj, 1, 2, 3);
    // function接收到的参数实际上是 1, 2, 3
    
    func.call(obj, [1, 2, 3]);
    // function接收到的参数实际上是 [1,2,3],undefined,undefined

    apply方法最多只有两个参数,第二个参数接收数组或者类数组,但是都会被转换成类数组传入func中,并且会被映射到func对应的参数上

    列子:

    func.apply(obj, [1, 2, 3]);
    // function 接收到的函数实际上是1, 2, 3
    
    func.apply(obj, {
        0: 1,
        1: 2,
        2: 3,
        length: 3
    });
    // function接收到的参数实际上是 1, 2, 3

    有的时候是不是和我一样 apply 和 call 在使用中不知所措,不知道用哪个?两个方法该如何选择是吧?

      很简单,根据你要传入的参数来做选择,不需要传参或者只有1个参数的时候,用call,当要传入多个对象时,用apply

    或者,如果需要传入的参数已经是一个数组或者类数组了,就用apply,如果还是单独的需要逐个传入的,可以考虑使用call(如果你不嫌麻烦的话 )

  • 相关阅读:
    jdk环境变量及1.6官方下载地址
    linux创建用户和用户组
    java左移右移运算符
    浏览器是如何存储密码的
    【转】 ip段/数字,如192.168.0.1/24是什么意思?
    动态代理实现AOP【转】
    java自定义注解注解方法、类、属性等等【转】
    oracle插入主键数据、sequence和触发器
    ThreadLocal意为变量副本
    【转】java内部类的作用
  • 原文地址:https://www.cnblogs.com/jie888/p/9088926.html
Copyright © 2011-2022 走看看