嵌套的 ES6 类?

新手上路,请多包涵

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

[编辑] 例如,

 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

原文由 user5321531 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 755
2 个回答

不,在 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 {
         …
    }
};

原文由 Bergi 发布,翻译遵循 CC BY-SA 4.0 许可协议

像那样的东西?

 class A {
    constructor () {
        this.B = class {
            echo () {
                console.log('I am B class');
            }
        }
    }
    echo () {
        this.b = new this.B;
        this.b.echo();
    }
}

var a = new A;

a.echo();

原文由 Ammatwain 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏