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

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

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 Report

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 Report

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 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!