【问题标题】:Spread operator alternative扩展运算符替代
【发布时间】:2016-09-20 21:43:40
【问题描述】:

我收到以下代码:

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);
  } 
}

它在大多数浏览器中都很好用,但在 opera 中却不行。我收到以下错误:

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

我访问了https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_operator 以查看是否有替代方法来查看是否有用于此的 polyfill,但我找不到。

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

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

我怎样才能使它适用于所有浏览器?

【问题讨论】:

  • 删除...props,添加var props = arguments;?实际上,可能需要转换为数组,所以[].slice.call(arguments);

标签: javascript


【解决方案1】:

你不能 polyfill 语法。它只是行不通。语法检查发生在 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);
  } 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 2018-12-30
    • 2017-12-20
    • 2020-04-13
    • 2018-07-29
    • 2019-02-25
    相关资源
    最近更新 更多