【react】react18的学习(十二)– 底层原理(二)之 迭代器 iterator

迭代器iterator

是一种 ES6 规范,具有这种机制的数据结构才可以使用for of循环:返回每一项的值;

原型链具有Symbol.iterator属性的数据结构都具备;如数组、部分类数组、字符串等;

普通对象就不能用;

for-of循环原理:循环获取属性值;

  • 执行可迭代原型链上的Symbol.iterator方法,该方法返回一个包含next方法的对象;
  • 通过循环执行next方法,得到方法返回的对象,根据对象中值抛出返回值;
js 复制代码
let obj = {
  name: 'aa',
  age: 10,
}

Object.prototype[Symbol.iterator] = function iterator() {
  let self = this,
    index = -1,
    keys = Reflect.ownKeys(self)
  console.log(keys) //  ['name', 'age']
  return {
    next() {
      index++
      if (index > keys.length - 1) {
        return {
          done: true,
          value: undefined,
        }
      }
      return {
        done: false,
        value: self[keys[index]],
      }
    },
  }
}
for (const iterator of obj) {
  console.log(iterator) // aa 10
}
相关推荐
lvchaoq8 小时前
this指向面试代码输出题目合集
javascript·面试·职场和发展
醉城夜风~8 小时前
MyBatis 基础CRUD全套实战学习笔记
笔记·学习·mybatis
你怎么知道我是队长9 小时前
JavaScript 函数 this 全解
开发语言·javascript·ecmascript
Flandern11119 小时前
从“能跑”到“可运营”:Agent Harness 工程化建设指南
学习·agent·claudecode·harness
hj2862519 小时前
Shell 脚本完整学习笔记
chrome·笔记·学习
m0_377108149 小时前
cmake学习
学习
码片向量9 小时前
状态空间模型SSM学习笔记
笔记·学习·ssm·语音增强·状态空间
luoyayun3619 小时前
【音频基础学习】第 5 天,理解音量、增益和分贝
学习·音视频·音频基础学习
万岳科技系统开发10 小时前
智慧医院小程序开发满足医疗机构多场景服务需求
数据库·学习·小程序
笑鸿的学习笔记10 小时前
C++笔记之内存映射、零拷贝与共享内存(学习三)-操作系统术语概念图
笔记·学习