zoukankan      html  css  js  c++  java
  • 使用展开操符作替代 .apply() (prefer-spread)

    ES2015以前,你必须使用Function.prototype.apply()来调用可变函数。

    var args = [1, 2, 3, 4];
    Math.max.apply(Math, args);
    

    ES2015以后,你可以使用展开操作符来调用可变函数。

    /*eslint-env es6*/
    
    var args = [1, 2, 3, 4];
    Math.max(...args);
    

    规则详情

    这条规则说明了在什么情况下使用展开操作符来代替Function.prototype.apply()

    例子

    • 不正确的例子
    /*eslint prefer-spread: "error"*/
    
    foo.apply(undefined, args);
    
    foo.apply(null, args);
    
    obj.foo.apply(obj, args);
    
    
    • 正确的例子
    /*eslint prefer-spread: "error"*/
    
    // The `this` binding is different.
    foo.apply(obj, args);
    obj.foo.apply(null, args);
    obj.foo.apply(otherObj, args);
    
    // The argument list is not variadic.
    // Those are warned by the `no-useless-call` rule.
    foo.apply(undefined, [1, 2, 3]);
    foo.apply(null, [1, 2, 3]);
    obj.foo.apply(obj, [1, 2, 3]);
    
    

    已知的限制:
    规则分析代码静态的检查this参数是否被改变。所以,如果this参数在动态表达式用被计算,那么这个规则不能检测出改变。

    /*eslint prefer-spread: "error"*/
    
    // This warns.
    a[i++].foo.apply(a[i++], args);
    
    // This does not warn.
    a[++i].foo.apply(a[i], args);
    
    
  • 相关阅读:
    zabbix验证微信
    free
    有名管道和无名管道
    shell实现并发控制
    TCP/IP协议簇 端口 三次握手 四次挥手 11种状态集
    自动化运维
    JSON对象(自定义对象)
    对象中属性的遍历、删除与成员方法
    对象间的赋值操作
    自定义类
  • 原文地址:https://www.cnblogs.com/Phantom01/p/5892344.html
Copyright © 2011-2022 走看看