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

巴别塔遗传失去原型

  •  1
  • riv  · 技术社区  · 6 年前

    const fooBar = parent => class extends parent {
      constructor() {
        super();
        this.foo = 1;
      }
      bar() {
        return 2;
      }
    }
    
    class FooBar extends fooBar(Object) {};
    
    console.log(new FooBar());
    

    它创造了一个混音 fooBar FooBar 从它。运行此代码,可以预见,输出 FooBar { foo: 1 }

    现在让我们把巴贝尔带来。我用6.xx和最新的7.2都试过了。从一个新文件夹开始,

    npm i @babel/core @babel/preset-env
    echo { "presets": ["@babel/preset-env"] } > .babelrc
    npx babel test.js > test2.js
    node test2.js
    

    { foo: 1 } -正如我们所看到的,原型机丢失了。正在尝试调用 bar 创建的实例将失败。

    这是巴别塔的一个漏洞还是我在不受支持的方式使用继承?

    更新: https://babeljs.io/en/repl 所以我的安装似乎没有问题。

    1 回复  |  直到 6 年前
        1
  •  0
  •   riv    6 年前

    巴贝尔似乎不太支持扩展原生对象。在Babel 6中,这根本不起作用,在Babel 7中,它试图在扩展本地语言之前包装它们,但是通过函数参数传递它会绕过检查。

    class {} 而不是 Object

    相关问题: https://github.com/babel/babel/issues/9183