Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

266
Vistas
¿Clases ES6 anidadas?

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 scope

El 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.js
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

No, 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 { … } };
over 4 years ago · Santiago Trujillo Denunciar

0

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.Node
  • Node {symbol: 0, weight: 0}
  • new Huffman.Node
  • Node {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).

over 4 years ago · Santiago Trujillo Denunciar

0

¿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();
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda