迭代器与iterable
迭代器与iterable
最近在学习ES6,有两个概念一直纠缠不清,就是迭代器与iterable,查阅了一些资料,简单来说迭代器就是包含next方法的对象,而iterable是包含可以在其值上迭代的迭代器的对象,但它必须支持一个函数,其名称是专门的ES6符号值 Symbol.iterator,简单来说就是iterable要包含一个Symbol.iterator方法,上代码吧:
var iterator = {
    next() {
        return {
            done: false,
            value: 'Love xia'
        };
    }
};
如上便是一个实现了标准迭代器接口的迭代器,需要说明的是迭代器不可for of遍历。
var iterable = {
    [Symbol.iterator]() {
        return this;
    }
};
上面是一个iterable,虽然毫无意义,我的理解就是拥有Symbol.iterator就拥有了资格,至于这个方法返回什么并不重要,为了有意义我们要返回迭代器,如下:
var iterable = {
    [Symbol.iterator]() {
        return {
            next() {
                return {
                    value: 'Love xia',
                    done: Math.random() > 0.7
                }
            }
        };
    }
};
最后我们来做一个即是迭代器又是iterable的对象来总结一下:
var it = {
    [Symbol.iterator]() {
        return this;
    },
    next() {
        return {
            value: 'Love xia',
            done: false
        };
    }
};
理解有误的地方还请不吝指出。
迭代器与iterable的更多相关文章
- Java之iterator迭代器和iterable接口
		java.lang.Iterable java.util.Iterator Iterator是迭代器类,而Iterable是接口. 好多类都实现了Iterable接口,这样对象就可以调用iterato ... 
- Python 中 Iterator(迭代器)和Iterable(迭代对象)的区别
		直接可以用作for循环的数据类型有以下几种: tuple.list.dict.str等, 上述数据类型可以用作for循环的叫做可迭代对象Iterable.可以使用isinstance判断一个对象是否是 ... 
- Python(五)  迭代器(Iterable/Iterator/iter())
		原文的链接:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143178254 ... 
- python 装饰器、生成器、迭代器
		# 装饰器'''由高阶函数(把一个函数名当作实参传递给另一个函数,返回值中包含函数名)和嵌套函数(函数中嵌套函数)组成功能:在不更改原函数的代码和调用方式的前提下添加新的功能装饰器本身就是一个函数.使 ... 
- 迭代器(Iterator)
		迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为"轻量级"对象,因为创建它的代价小. Java中的Itera ... 
- 深入剖析java迭代器以及C#迭代器!
		目录: 知道迭代器接口Iterable 为什么java的for增强可以自动迭代 那些类可以被迭代 通过什么方法迭代 1.知道迭代器接口Iterable 解析: 迭代器(iterator)是一种对象,它 ... 
- python的语法小结之生成器和迭代器
		生成器: 首先介绍一下列表生成式:a=[x for x in range(10)] >>>>>>[0, 1, 2, 3, 4, 5, 6 ... 
- Day11--Python--函数名,闭包,迭代器
		通过 lst.__iter__()拿到lst.的迭代器 1.函数名第一类对象 函数名就是变量名 1.函数名可以像变量一样互相赋值. 2.可以作为函数的参数,进行传递 3.可以作为返回值返回 4.可以作 ... 
- Java 迭代器综述
		一.摘要 迭代器模式是与集合共生共死的.一般来说.我们仅仅要实现一个容器,就须要同一时候提供这个容器的迭代器.使用迭代器的优点是:封装容器的内部实现细节,对于不同的集合,能够提供统一的遍历方式,简化c ... 
随机推荐
- 【BZOJ3944】 Sum
			Description Input 一共T+1行 第1行为数据组数T(T<=10) 第2~T+1行每行一个非负整数N,代表一组询问 Output 一共T行,每行两个用空格分隔的数ans1,ans ... 
- NOI数论姿势瞎总结(Pi也没有)
			Miller-Rabin素数检测 费马小定理:没人不会吧. 二次探测:如果\(n\)是质数,\(x^2 \equiv 1\ (\mod n)\)的解只有\(x \equiv 1\)或\(x \equi ... 
- 【转】【Linux经验】Codeblocks 13.12自动补全 、缩进解决
			最近使用Xubuntu 14.04学习C语言编程,发现了Codeblocks这款比较方便简单.适合我这种新手的IDE.之前用过Codeblocks10.04,它的代码自动补全和自动缩进让我眼前一亮.但 ... 
- JS框架_(JQuery.js)夜晚天空满天星星闪烁动画
			百度云盘 传送门 密码:xftr 满天星星闪烁动画效果: (可用星空动画来作为页面背景,白色文字改为文章或者其他的O(∩_∩)O) <!doctype html> <html> ... 
- springmvc文件上传 参数为MultipartFile 转换为File
			package cn.com.mcd.controller;import java.io.File;import java.io.IOException;import java.io.Serializ ... 
- 过滤器修改response
			过滤器通过doFilter方法的第二个参数ServletResponse将输出发送给客户,但servletResponse参数没有为过滤器提供servlet或jsp页面的访问:执行doFilter方法 ... 
- Moodle LMS 开源教育系统
			http://docs.websoft9.com/xdocs/moodle-image-guide/ 帮助文档 示例图:没有细研究 
- 一次性生产KEY
			keytool -genkey -alias rebuild -keypass rebuild -keyalg RSA -keysize -validity -keystore rebuild.key ... 
- 联想笔记本安装乌班图16.04无法连接WIFI的问题
			来自大佬微博 https://www.cnblogs.com/carious/p/9580344.html 
- Android内存Activity泄露:Handler与Threads
			Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收.也就是说,一个对象不被任何引用所指向,则该对象会在被 ... 
