代码之家  ›  专栏  ›  技术社区  ›  user2924127

扩散运算符备选方案

  •  2
  • user2924127  · 技术社区  · 10 年前

    我收到了以下代码:

    function sortByProp(...props) {
      const callback = props.pop();
      return function(a, b) {
        const v1 = retrieve(props, a);
        const v2 = retrieve(props, b);
        return callback(v1, v2);
      } 
    }
    

    它在大多数浏览器中都很有用,但在歌剧中就不行了。我得到以下错误:

    function sortByProp(...props) {
                        ^^^
    SyntaxError: Unexpected token ...
    

    我参观了 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_operator 看看是否有其他选择,看看是否有一个聚合填料,但我找不到一个。

    我使用这两个函数调用此函数:

    .sort(sortByProp('key', 'k', a))
              .sort(sortByProp('key', 'n', b));
    

    如何使它在所有浏览器中都能工作?

    1 回复  |  直到 10 年前
        1
  •  6
  •   Mike Cluck    10 年前

    不能聚合填充语法。它就是不起作用。语法检查在polyfill的任何逻辑出现之前进行。你能做的就是使用编译器 Babel 将ES2015代码转换为ES5。或者您可以重写函数以使用 arguments :

    function sortByProp() {
      var props = [].slice.call(arguments);
      const callback = props.pop();
      return function(a, b) {
        const v1 = retrieve(props, a);
        const v2 = retrieve(props, b);
        return callback(v1, v2);
      } 
    }