Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

271
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!