嵌套的ES6类?

用户5321531:

似乎有可能将一个类嵌套在一个构造函数中,然后可以从该类中的任何位置实例化该构造函数,这是官方吗?

[编辑]例如

class C {

    constructor() {
        class D {
            constructor() { }
        }
    }

    method() {
        var a = new D();  // works fine
    }

}

//var a = new D();  // fails in outer scope

Traceur生成的JS https://google.github.io/traceur-compiler/demo/repl.html

$traceurRuntime.ModuleStore.getAnonymousModule(function() {
  "use strict";
  var C = function C() {
    var D = function D() {};
    ($traceurRuntime.createClass)(D, {}, {});
  };
  ($traceurRuntime.createClass)(C, {method: function() {
      var a = new D();
    }}, {});
  return {};
});
//# sourceURL=traceured.js
贝尔吉:

不,ES6中没有嵌套的类,如果您是这样的话,则在类语法中也没有私有成员之类的东西。

当然,您可以将第二个类作为静态属性放置在另一个类上,如下所示:

class A {
    …
}
A.B = class {
    …
};

或者您使用额外的范围:

var C;
{
    class D {
        constructor() { }
    }
    C = class C {
        constructor() { }
        method() {
            var a = new D();  // works fine
        }
    }
}

(traceur似乎存在一个错误,因为它使用提升var的类声明而不是块作用域)


使用建议的类字段语法,也可以编写单个表达式或声明:

class A {
    …
    static B = class {
         …
    }
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章