ES6 类编译为 ES5 函数构造函数

ES6 Class compilation to ES5 function constructor

提问人:cvass 提问时间:11/11/2023 更新时间:11/11/2023 访问量:26

问:

我在使用 Typescript 的编译器选项时注意到了一些东西。(打字稿在这里无关紧要,我只是把它当作编译器,就像通天塔一样)

所以,我在.ts文件中有这段代码

(function () {
  class Person {
    name: string;

    constructor(n: string) {
      this.name = n;
    }
  }

  const jack = new Person("Jack");
  console.log(jack.name);
})();

当我运行编译器(我将输出设置为es5)时,它给了我这个:

"use strict";
(function () {
    var Person = /** @class */ (function () {
        function Person(n) {
            this.name = n;
        }
        return Person;
    }());
    var jack = new Person("Jack");
    console.log(jack.name);
})();

正如预期的那样,类将转换为构造函数。

但是,为什么需要将其包装在立即调用的函数表达式 (IIFE) 中呢?一个更简单的版本,比如下面的版本,难道还不够吗?

"use strict";
(function () {
    
      function Person(n) {
          this.name = n;
      }
    var jack = new Person("Jack");
    console.log(jack.name);
})();

构造函数 ECMAScript-5 IIFE

评论

1赞 trincot 11/11/2023
我同意在这种情况下归结为相同的,但可能转译器选择这种模式,预见到私有字段的支持,这可能会导致在该闭包中创建其他对象(如 WeakMap,...
1赞 Bergi 11/11/2023
尝试使用 作为表达式,并向其添加一些私有或静态属性或静态初始值设定项class

答: 暂无答案