Parece posible anidar una clase en un constructor que luego se puede instanciar desde cualquier lugar dentro de la clase, ¿es esto oficial?
[EDITAR] Por ejemplo,
class C { constructor() { class D { constructor() { } } } method() { var a = new D(); // works fine } } //var a = new D(); // fails in outer scopeEl JS generado por traceur 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.jsNo, no hay clases anidadas en ES6, y de todos modos no existen los miembros privados en la sintaxis de la clase si lo dice en serio.
Por supuesto, puede poner una segunda clase como propiedad estática en otra clase, así:
class A { … } AB = class { … };o usas un alcance adicional:
var C; { class D { constructor() { } } C = class C { constructor() { } method() { var a = new D(); // works fine } } } (Parece haber un error con traceur ya que usa una var elevada para la declaración de clase en lugar del alcance del bloque)
Con la sintaxis de campo de clase propuesta , también será posible escribir una sola expresión o declaración:
class A { … static B = class { … } };Podrías usar un captador:
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;Que en el último Chrome Dev 44.0.2376.0 en Apple 10.10.2 da en la consola
new huffman.NodeNode {symbol: 0, weight: 0}new Huffman.NodeNode {symbol: 0, weight: 0}En otras noticias, los captadores son el ingrediente secreto que te permite hacer un montón de cosas geniales en ES6.
Tenga en cuenta que la construcción anterior rompe la instanceof de Node (¿por qué? Porque se define una clase completamente nueva con cada llamada get). Para no romper la instanceof de definir el nodo fuera del alcance de un captador único, ya sea en el constructor (deshabilitando la propiedad de la clase Huffman.Node y haciendo que la instanceof de funcione dentro del espacio de nombres de una sola instancia de Huffman, y rompa fuera de eso), o definir el nodo en un ámbito hermano o antepasado de Huffman (permitiendo que instanceof funcione en todos los ámbitos por debajo de aquel en el que se define Nodo).
¿algo como eso?
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();