似乎可以在构造函数中嵌套一个类,然后可以从类中的任何地方示例化,这是官方的吗?
[编辑]例如,
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
4条答案
按热度按时间3b6akqbq1#
不,ES6中没有嵌套的类作用域,而且在类语法中也没有私有成员这样的东西,如果你是这个意思的话。
当然,你可以把第二个类作为一个静态属性放在另一个类上,像这样:
或者使用额外的范围:
(traceur似乎有一个bug,因为它使用了一个提升的
var
作为类声明,而不是块作用域)使用class field syntax,还可以编写单个表达式或声明:
fdbelqdn2#
类似的东西吗
unguejic3#
你可以使用getter:
在最新的Chrome Dev 44.0.2376.0在苹果10.10.2给在控制台
new huffman.Node
Node {symbol: 0, weight: 0}
new Huffman.Node
Node {symbol: 0, weight: 0}
在其他新闻中,getter是让你在ES6中做一大堆很酷的事情的秘密酱料。
请注意上述结构将
instanceof
分解为Node
(为什么?因为每次get调用都定义了一个全新的类)。为了不中断instanceof
,在单个getter作用域之外定义Node,要么在构造函数中(禁用霍夫曼类属性,使instanceof
在单个Huffman示例的命名空间内工作,并在其外部中断),要么在Huffman的兄弟或祖先作用域中定义Node(允许instanceof
在定义Node的范围之下的所有作用域中工作)。ars1skjm4#
当在父类的构造函数中创建嵌套子类时,这意味着父类的每个示例都有自己的子类。通常这不是你想要的。相反,您需要一个子类,它在父类的所有示例之间共享。这意味着嵌套类必须是静态的。这是一个例子: