una tipos llamar herencia example es6 ecmascript como clases clase ecmascript-6 traceur

ecmascript 6 - tipos - ¿Clases anidadas de ES6?



herencia de clases javascript (3)

Parece posible anidar una clase en un constructor que luego puede ser instanciada desde cualquier lugar dentro de la clase, ¿es esto oficial?

[EDIT] Eg,

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

El traceur generó 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


¿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();


No, no hay clases anidadas en ES6, y tampoco hay miembros privados en la sintaxis de la clase, si te refieres a eso.

Por supuesto, puede poner una segunda clase como propiedad estática en otra clase, como esta:

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

o usas un alcance adicional:

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

(Parece que hay un error con traceur, ya que utiliza una var alzada para la declaración de clase en lugar del ámbito de 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 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;

Que en el último Chrome Dev 44.0.2376.0 en Apple 10.10.2 da en la consola

  • new huffman.Node
  • Node {symbol: 0, weight: 0}
  • new Huffman.Node
  • Node {symbol: 0, weight: 0}

En otras noticias, los captadores son la salsa secreta que te permite hacer un montón de cosas interesantes en ES6.

Tenga en cuenta La construcción anterior rompe instanceof para Node (¿por qué? Porque se define una clase completamente nueva con cada llamada get). Para no romper la instanceof definir Node fuera del alcance de un único getter, ya sea en el constructor (deshabilitando la propiedad Huffman.Node class y haciendo que instanceof trabaje dentro del espacio de nombres de una sola instancia Huffman, y rompa afuera de eso), o defina Node en un ámbito de hermano o ancestro a Huffman (permitiendo que instanceof funcione en todos los ámbitos por debajo de aquel en el que se define Nodo).