9

我需要动态定义类,所以在我的 ES6 代码中编写了一个代码生成器:

function makeClass(className, baseClass = _DefaultBaseClass, ...args) {
  return (
    eval(`
      class ${className} extends ${baseClass} {
        constructor(${...args}) {
          super(${...args})
        }
      }
   `)
  )
}

'_DefaultBaseClass' 是一个空类,用于简化上述生成器函数逻辑:

class _DefaultBaseClass() {
  constructor() {}
}

除了扩展运算符之外,生成器代码一切正常。在此示例中,扩展运算符本身在模板文字之外的项目中可以正常工作。

我正在使用以下 webpack Babel 预设/插件:'react'、'es2015'、'stage-2'、'transform-runtime'。

4

1 回答 1

6

正如评论中提到的,...它与特定的用例有关。${...args}甚至没有多大意义。结果应该是什么?例如,如果${...args}将等价于${args[0],args[1]},那么它将评估为 的值args[1],因为这里,是一个逗号运算符。

模板文字可以包含任意表达式,因此您可以执行以下操作:

`${args.join(",")}`
于 2017-03-07T08:52:02.767 回答