今晚写,迭代器的对象等

自定义迭代器

  1. // 自定义迭代器
  2. class CountItem {
  3. constructor (item) {
  4. this.item = item
  5. this.count = 1
  6. }
  7. next () {
  8. // 判断
  9. if (this.count <= this.item) {
  10. return {
  11. done: false, value: this.count++
  12. }
  13. } else {
  14. return {
  15. done: true, value: undefined
  16. }
  17. }
  18. }
  19. [Symbol.iterator]() {
  20. // 调用这个接口,返回tihs,
  21. // this本身具有 next() 方法,也就是迭代器方法
  22. return this
  23. }
  24. }
  25. let arr = new CountItem(3)
  26. for (let i of arr) {
  27. console.log(i)
  28. }
  1. // 以上方法出现的问题
  2. // 一个实例化对象,只能迭代一次。
  3. // 解决问题,在没创建一个迭代器时候,就对应着一个新的计数器。然后将计数器比变量放到闭包里
  4. // 通过闭包返回迭代器
  5. class CountItem {
  6. constructor (item) {
  7. this.item = item
  8. }
  9. [Symbol.iterator]() {
  10. // 使用item闭包
  11. let count = 1,
  12. item = this.item
  13. return {
  14. next () {
  15. // 判断
  16. if (count <= item) {
  17. return {
  18. done: false, value: count++
  19. }
  20. } else {
  21. return {
  22. done: true, value: undefined
  23. }
  24. }
  25. }
  26. }
  27. }
  28. }
  29. let arr = new CountItem(3)
  30. console.log([...arr])