• apply 和 call


    1. 一句话概括

    代码

    foo.call(this, arg1, arg2, arg3) 
    == foo.apply(this, arguments) 
    == this.foo(arg1, arg2, arg3)
    

    2. call 的使用

    代码

    function A() {
        this.msg = "msg A";
        this.getMsg = function() {
            return this.msg;
        }
    }
    
    function B() {
        this.msg = "msg B";
        this.setMsg = function(val) {
            this.msg = val;
        }
    }
    
    var a = new A(),
        b = new B();
    
    //对象A本身没有setMsg方法,而是B把自己的setMsg方法指派给A使用
    //相当于a.setMsg("call from b")
    b.setMsg.call(a, "call from b");
    
    console.log(a.getMsg());
    

    3. 和 apply 的比较

    代码

    function print(a, b, c, d) {
        console.log(a + b + c + d);
    }
    
    function example(a, b, c, d) {
        //参数显式打散传递
        print.call(this, a, b, c, d);
    
        //参数作为一个整体的数组来传递
        //方式一
        print.apply(this, arguments);
        //方式二
        print.apply(this, [a, b, c, d]);
    }
    
    //输出”哈喽沃德“
    example("哈", "喽", "沃", "德");
    

    4. 总结

    相同:作用相同,都是在特定的作用域中调用函数;
    不同:用法不同导致应用场景不同,call的第二个参数必须一个一个列举出来,一般在参数明确的情况下使用,apply的第二个参数是一个参数数组或者argements,一般在参数个数不确定的情况下使用。

  • 相关阅读:
    .NET开发微信公众号之创建自定义菜单
    FOR XML PATH 可以将查询结果根据行输出成XML格式
    Node入门
    javascript客户端检测技术
    理解OAuth 2.0(转)
    RESTful API 设计指南(转)
    forever让nodejs应用后台执行
    Git使用教程
    NodeJS基础教程
    windows系统下简单nodejs安装及环境配置
  • 原文地址:https://www.cnblogs.com/HuoAA/p/5074258.html
Copyright © 2020-2023  润新知