目录
- //1.创建迭代器对象
- //具备迭代器的数据 都会有一个方法 Symbol.iterator
- //这个方法的返回值是 迭代器对象
- //因此 我们这里 就获取返回值 得到迭代器对象
- let 迭代器对象变量名 = 具备迭代器的数据[Symbol.iterator]()
-
- //2.迭代器对象 具备一个方法 next 可以一步一步的循环指定的数据
- //next方法 会将迭代器对象 循环出来的值 返回出来
- console.log(迭代器对象变量名.next())
-
- //{value:本次循环的结果,done:数据循环是否结束 结束为true 没结束为false}
- for of
- for(let 值变量 of 要循环的数据(带有迭代器)){
- //循环体代码
- //值变量 就表示 每一次 迭代器循环出来的结果
- }
- //什么是迭代器呢 其实迭代器 就是一个方法 Symbol.iterator 数据调用这个方法 就可以生成迭代器对象从而实现 循环效果
-
- //对象本身 没有这个方法 我们如果想给对象部署迭代器 其实就是给对象添加这个方法
- //为了让所有对象 都能用到迭代器方法 我们将迭代器方法Symbol.iterator 添加到原型链的终点 Object.prototype
-
- Object.prototype[Symbol.iterator] = function(){
- //this--->被循环的对象
- let that = this;
- //获取到被循环的对象中 所有的属性值
- let valArr = Object.values(this);//valArr就是被循环的对象中的所有属性值组成的数组
- //声明一个变量 记录当前索要循环的索引
- let idx = -1
- //这个方法 应该返回一个迭代器对象
- let iterator = {
- //迭代器对象中具备一个方法 next 用来循环指定数据
- next(){
- idx++;
- //next方法返回了一个对象——{value:本次循环的属性值,done:false/true}
- if(idx
length){ - return {
- value:valArr[idx],
- done:false
- }
- }else{
- return {
- value:valArr[idx],
- done:true
- }
- }
-
- }
- }
- return iterator;
- }
-
- let obj = {
- name:"张三",
- age:18
- }
- let it = obj[Symbol.iterator]();
- console.log(it.next());
- console.log(it.next());
- console.log(it.next());
-
- for(let val of obj){
- console.log(val)
- }
-
- console.log(...obj)
-
- let obj1 = {
- name:"李四",
- age:19,
- gender:"男"
- }
- console.log(...obj1)