似乎可以在构造函数中嵌套一个类,然后可以在类中的任何地方实例化,这是官方的吗?
[编辑]例如,
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
答案 0 :(得分:43)
不,ES6中没有嵌套类,如果你的意思是,类语法中没有私有成员。
当然,您可以将第二个类作为静态属性放在另一个类上,如下所示:
class A {
…
}
A.B = class {
…
};
或者您使用额外的范围:
var C;
{
class D {
constructor() { }
}
C = class C {
constructor() { }
method() {
var a = new D(); // works fine
}
}
}
(traceur似乎有一个错误,因为它使用挂起的var
作为类声明而不是块范围)
使用proposed class field syntax,还可以编写单个表达式或声明:
class A {
…
static B = class {
…
}
};
答案 1 :(得分:2)
你可以使用一个getter:
class Huffman {
constructor() { /* ... */ }
static get Node() {
return class Node {
constructor() {
var API = this;
API.symbol = 0; API.weight = 0;
return API;
}
};
}
get Node() {
return Huffman.Node;
}
encode() { /* ... */ }
decode() { /* ... */ }
/* ... */
}
// usage
huffman = new Huffman;
new huffman.Node;
new Huffman.Node;
Apple 10.10.2上最新的Chrome Dev 44.0.2376.0在控制台中提供了
new huffman.Node
Node {symbol: 0, weight: 0}
new Huffman.Node
Node {symbol: 0, weight: 0}
在其他新闻中,吸气剂是秘密的酱油,让你在ES6中做了很多很酷的事情。
请注意以上结构会导致instanceof
的{{1}}(为什么?因为每次调用都会定义一个全新的类)。不要在构造函数中将Node
定义在单个getter范围之外的Node中(禁用Huffman.Node类属性并使instanceof
在单个Huffman实例的命名空间内工作,并且断开那个),或者将兄弟或祖先范围中的Node定义为Huffman(允许instanceof
在低于定义Node的所有范围内工作)。
答案 2 :(得分:2)
类似的东西?
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();