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

297
Vistas
Cómo hacer un iterador de una clase ES6

¿Cómo haría un iterador de una clase ES6 de la misma manera que JS1.7 SomeClass.prototype.__iterator__ = function() {...} sintaxis?

[EDITAR 16:00]

Los siguientes trabajos:

 class SomeClass { constructor() { } *[Symbol.iterator]() { yield '1'; yield '2'; } //*generator() { //} } an_instance = new SomeClass(); for (let v of an_instance) { console.log(v); }

WebStorm marca *[Symbol.iterator]() con una advertencia de 'nombre de función esperado' directamente después del asterisco, pero por lo demás, se compila y funciona bien con Traceur. (Tenga en cuenta que WebStorm no genera ningún error para *generator() .

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Debe especificar la propiedad Symbol.iterator para SomeClass que devuelve iterador para instancias de clase. El iterador debe tener el método next() , que a su vez devuelve el objeto con los campos de value y done . Ejemplo simplificado:

 function SomeClass() { this._data = [1,2,3,4]; } SomeClass.prototype[Symbol.iterator] = function() { var index = 0; var data = this._data; return { next: function() { return { value: data[++index], done: !(index in data) } } }; };

O usando clases ES6 y funciones de flecha:

 class SomeClass { constructor() { this._data = [1,2,3,4]; } [Symbol.iterator]() { var index = -1; var data = this._data; return { next: () => ({ value: data[++index], done: !(index in data) }) }; }; }

Y uso:

 var obj = new SomeClass(); for (var i of obj) { console.log(i) }

En su pregunta actualizada, se dio cuenta del iterador de clase a través de la función del generador . Puede hacerlo, pero debe comprender que el iterador NO PUEDE SER un generador. En realidad, el iterador en es6 es cualquier objeto que tenga un método next() específico

over 4 years ago · Santiago Trujillo Denunciar

0

Defina un método iterador adecuado. Por ejemplo:

 class C { constructor() { this.a = [] } add(x) { this.a.push(x) } [Symbol.iterator]() { return this.a.values() } }

Editar: Ejemplo de uso:

 let c = new C c.add(1); c.add(2) for (let i of c) console.log(i)
over 4 years ago · Santiago Trujillo Denunciar

0

Aquí hay un ejemplo para iterar sobre una clase personalizada de matriz 2d en ES6

 class Matrix { constructor() { this.matrix = [[1, 2, 9], [5, 3, 8], [4, 6, 7]]; } *[Symbol.iterator]() { for (let row of this.matrix) { for (let cell of row) { yield cell; } } } }

El uso de tal clase sería

 let matrix = new Matrix(); for (let cell of matrix) { console.log(cell) }

que daría salida

 1 2 9 5 3 8 4 6 7
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