es6中只有具有iterator接口的数组或者类数组(arguments)都可以使用for of来循环,但是对于对象来说不行,可以利用迭代器中的原理来给对象生成一个迭代器,实现让对象可以使用for of

 1 var j={
 2                 name:'小红',
 3                 age:18
 4             }
 5             //给j对象添加一个iterator接口
 6             j[Symbol.iterator]=function(){
 7                 //使用object.keys()方法把j对象中的k值读取出来存在数组当中
 8                 var arr=Object.keys(j);
 9                 var i=0;
10                 return {
11                     //ES6中next()迭代方法,自动迭代
12                     next(){
13                         if(i<arr.length){
14                             //如果done为false,继续迭代
15                             return {
16                                 //返回迭代的最后结果,如果是一个对象,那么for of的时候需要用解构
17                                 value:{
18                                     k:arr[i],
19                                     val:j[arr[i++]]
20                                 },
21                                 done:false
22                             }
23                         }else{
24                             //如果done为true,继续迭代
25                             return{
26                                 value:null,
27                                 done:true
28                             }
29                         }
30                     }
31                 }
32             }
33             //解构获取返回得到的对象,输出k值,val值
34             for(var {k,val} of j){
35                 console.log(k,val);
36             }

转载于:https://www.cnblogs.com/AngliaXu/p/7337064.html

使对象具有ES6中Iterator接口的实现方法相关推荐

  1. 初步解读Golang中的接口相关编写方法

    初步解读Golang中的接口相关编写方法 概述如果说goroutine和channel是Go并发的两大基石,那么接口是Go语言编程中数据类型的关键.在Go语言的实际编程中,几乎所有的数据结构都围绕接口 ...

  2. sklearn中FastICA接口的使用方法

    sklearn中FastICA接口的使用方法 ICA算法的数学原理 FastICA算法的实现过程及其python实现 sklearn中FastICA接口的使用方法 完整代码 ICA算法的数学原理 参考 ...

  3. es6 调用 Iterator 接口的场合

    调用 Iterator 接口的场合 有一些场合会默认调用 Iterator接口(即Symbol.iterator方法),除了下文会介绍的for...of循环,还有几个别的场合. (1)解构赋值 对数组 ...

  4. ES5和ES6中对于继承的实现方法

    在ES5继承的实现非常有趣的,由于没有传统面向对象类的概念,Javascript利用原型链的特性来实现继承,这其中有很多的属性指向和需要注意的地方. 原型链的特点和实现已经在之前的一篇整理说过了,就是 ...

  5. es6中的静态属性和方法

    es6 中 class 带static 关键字是静态方法 静态方法和对象无关,外部对象变量不能调用静态方法和属性 外部可以通过类名来调用 对象原型(就是类下面的方法)方法没有办法调用对象上面的静态方法 ...

  6. ES6中的Promis的使用方法

    什么是Promise? Promise是由 CommonJS 在 Promises/A 规范中提出来的,是js一部编程的重要概念,是比较就行的javascript一部变成解决方案之一. 常见的异步编程 ...

  7. es6 Symbol iterator接口

    Symbol定义:一种新的原始数据类型,表示独一无二的值,是一种类似字符串的数据类型 特点: 值是唯一的,用来解决命名冲突的问题 值不能与其他数据进行运算 注意点 Symbol 值作为属性名时,该属性 ...

  8. Java接口有时有结果 有时没有_《Java程序员面试笔试宝典》之为什么Java中有些接口没有任何方法...

    由于Java不支持多重继承,即一个类只能有一个父类,为了克服单继承的缺点,Java语言引入了接口这一概念.接口是抽象方法定义的集合(接口中也可以定义一些常量值),是一种特殊的抽象类.接口中只包含方法的 ...

  9. 为什么Java中有些接口没有任何方法

    面试题     不能用来修饰interface的有()  A. private             B.public                C.protected         D.st ...

最新文章

  1. java的this_java的this是什么意思
  2. python中mat函数_python matplotlib中的subplot函数使用详解
  3. pytorch如何计算导数_Pytorch的自动求导机制与使用方法(一)
  4. [渝粤教育] 山东第一医科大学 健康教育与健康促进 参考 资料
  5. linux gcc 制作动态库
  6. 重新学.Net[一]——.Net的组成
  7. Flask 第三方组件之 SQLAlchemy
  8. 机器学习回归算法—性能评估欠拟合与过拟合
  9. 最新版本elasticsearch本地搭建入门篇
  10. python学了真的很有用吗-学习Python真的有必要参加培训吗?老男孩Python学习机构...
  11. mysql select trim_mysql trim函数用法举例
  12. 注册测绘师20180301-测绘基准
  13. android 头像修改
  14. ipd敏捷开发_融入华为IPD软件开发流程与敏捷开发实施java课程设计
  15. 08_星仔带你学Java之什么是软件开发以及软件开发方式有哪些?
  16. SRE Google运维解密——第二章Goolgle的生成环境介绍
  17. 企业微信机器人脚本python_Python实现企业微信机器人每天定时发消息实例
  18. 短信系统实现原理(基于redis)
  19. 大学冷知识「高校的学生也有专属昵称」
  20. Mysql有四种事务隔离级别,详解脏读、不可重复读、幻读

热门文章

  1. BZOJ 2333 【SCOI2011】 棘手的操作
  2. Extjs4.0 开发笔记-desktop开始菜单动态生成方法
  3. 外媒列举2011年十大IT预测:鲍尔默卸任微软CEO
  4. Oracle数据库----函数
  5. BZOJ 1009: [HNOI2008]GT考试(kmp+dp+矩阵优化)
  6. GDOI2017第二轮模拟day1 总结
  7. JSP中文乱码问题终极解决方案(转)
  8. windows多线程同步--临界区
  9. mysql知识总结体会博客_可能是全网最好的MySQL重要知识点/面试题总结||CSDN博客精选...
  10. 机器视觉-EasyDL商品检测-标准版-Demo