【问题标题】:How to make babel output classes as named functions?如何将 babel 输出类作为命名函数?
【发布时间】:2018-09-30 09:12:48
【问题描述】:

现在它会将class X { ... } 转换为var X = function X(...) { ... },如何让它输出为function X (...) { ... }

【问题讨论】:

  • 如果我可以问你为什么要它?类没有被提升——如果你的 ES6 代码依赖它,那就错了。
  • 主要是因为如果你调用function Y创建class X但是函数是在类之前定义的,会报错。
  • @OneOfOne 这似乎是XY problem。您在问如何做一件事(改变 Babel 转换某些东西的方式),而您要解决的实际问题是其他问题(“如果您调用创建类 X 的函数 Y,但该函数是在类之前定义的,它会出错”)。询问后者,而不是前者。
  • @OneOfOne 应该如此(如果您的意思是函数被调用,而不是在类之前定义)。
  • 这不是真正的课程的工作方式。如果你这样做,当你停止使用 Babel 时,你的所有代码都会中断。 class X {}let X = class X {}; 基本相同。

标签: typescript webpack ecmascript-6 babeljs babel-loader


【解决方案1】:

函数声明和ES6类的区别在于函数声明是被提升的:

console.log(Foo); // Foo
function Foo() {}

并且类处于时间死区:

console.log(Foo); // ReferenceError
class Foo {}

将类转译为函数声明是不正确的,ES6类的正确函数表示为:

const Foo = function Foo() {};

由于 ES5 中没有 const,Babel 将其转换为 var,并在启用 respective transform 时尽可能模拟时间死区。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 2018-08-27
    相关资源
    最近更新 更多