在遍历数据结构的过程中,有当前被迭代元素的引用,然后把当前的元素返回出来。而且还知道当前元素移动下一个元素。还知道没有元素向下移动时,状态会为 Done 完成。

    1. class Creature {
    2. constructor() {
    3. // this.strength = this.agility = this.intelligence = 10;
    4. this.stats = new Array(3).fill(10);
    5. }
    6. get strength() {
    7. return this.stats[0];
    8. }
    9. set strength(value) {
    10. this.stats[0] = value;
    11. }
    12. get agility() {
    13. return this.stats[0];
    14. }
    15. set agility(value) {
    16. this.stats[1] = value;
    17. }
    18. get intelligence() {
    19. return this.stats[0];
    20. }
    21. set intelligence(value) {
    22. this.stats[2] = value;
    23. }
    24. /*get sumOfStats() {
    25. return this.strength + this.agility + this.intelligence;
    26. }
    27. get averageStat() {
    28. return this.sumOfStats / 3;
    29. }
    30. get MathStat() {
    31. return Math.max(this.strength, this.agility, this.intellience);
    32. }*/
    33. get sumOfStats() {
    34. return this.stats.reduce((x, y) => x + y, 0);
    35. }
    36. get averageStat() {
    37. return this.sumOfStats / this.stats.length;
    38. }
    39. get MathStat() {
    40. return Math.max(...this.stats);
    41. }
    42. }
    43. let creature = new Creature();
    44. creature.strength = 20;
    45. creature.agility = 30;
    46. creature.intellience = 40;
    47. console.log(`这个生物它的数据总和为${creature.sumOfStats}, ` +
    48. `数据的平均值为${creature.avgerageStat}, ` +
    49. `数据中的最大值为${creature.maxStat}`);

    ES6 Generator * 是官方迭代器模式的实现 Symbol.iterator

    1. let values = [100, 200, 300];
    2. for (let i in values) {
    3. console.log(`在第${i}位置的元素:${value[i]}`);
    4. }
    5. for (let v of values) { // 使用 Symbol.iterator 进行 遍历
    6. console.log(`值为${v}`);
    7. }
    1. class Stuff {
    2. constructor() {
    3. this.a = 10;
    4. this.b = 100;
    5. }
    6. [Symbol.iterator]() {
    7. let i = 0;
    8. let self = this;
    9. return {
    10. next: function() {
    11. return {
    12. done: i > 1,
    13. value: self[i++ === 0 ? 'a' : 'b']
    14. }
    15. }
    16. }
    17. }
    18. get backwards() {
    19. let i = 0;
    20. let self = this;
    21. return {
    22. next: function() {
    23. return {
    24. done: i > 1,
    25. value: self[i++ === 0 ? 'b' : 'a']
    26. }
    27. },
    28. [Symbol.iterator]: function() {
    29. return this;
    30. }
    31. }
    32. }
    33. }
    34. let stuff = new Stuff();
    35. for (let v of stuff) {
    36. console.log(`值为${v}`);
    37. }
    38. for (let v of stuff.backwards) {
    39. console.log(`值为${v}`);
    40. }