GithubHelp home page GithubHelp logo

一些问题 about es6tutorial HOT 6 CLOSED

ruanyf avatar ruanyf commented on April 30, 2024
一些问题

from es6tutorial.

Comments (6)

ruanyf avatar ruanyf commented on April 30, 2024

非常谢谢看得这么仔细。您指出的地方,基本都是我的错误,已经改正了。

目前,我将 Iterator 译为“遍历器接口”,可能译为“Iterator 协议”更好。

只要数据结构支持这个接口,就称为“可遍历”(iterator)。

该接口对应的是一个函数,调用该函数会返回一个 Iterator 对象,我译为“遍历器对象”。该对象代表一个指针,也就是 IteratorResult 。

from es6tutorial.

aisk avatar aisk commented on April 30, 2024

👍

from es6tutorial.

lidasong avatar lidasong commented on April 30, 2024

zan

from es6tutorial.

howiefh avatar howiefh commented on April 30, 2024

阮老师,我觉得JavaScript的Iterable,Iterator,IteratorResult三个接口可以和Java中的java.lang.Iterable,java.util.Iterator 两个接口做个类比。其它一些语言也有类似的实现。

java.lang.Iterable 接口

public interface Iterable<T> {
    Iterator<T> iterator();
}

java.util.Iterator 接口

public interface Iterator<E> {
    boolean hasNext();
    E next();
    void remove();
}

Java中实现Iterable接口可以使对象成为 "foreach" 语句的目标。像HashSet,ArrayList等类都实现了这个接口。于是就可以这样去遍历Set:

Set<String> set = new HashSet<String>();
for (String s: set){}

虽然JavaScript中没有像ES6中加入class一样加入interface关键字,但是有类似的概念,JavaScript中的接口就是对某一组属性的描述,只要一个对象具有某个接口描述的所有属性就可以称其实现了这个接口。

而JavaScript中的 Iterable 和 Iterator两个接口和Java中是十分相似的,Iterable接口和Java的java.lang.Iterable接口一样只包含一个方法[Symbol.iterator],这个方法返回一个实现了Iterator接口的对象,而只要实现了这个接口,就可以用于for-of语句。JavaScript中的 Iterator接口必须有一个next方法,这个方法和Java中java.util.Iterator接口的next方法类似,只是前者用next方法返回的IteratorResult对象的done属性判断是否遍历完了,而Java中的接口使用hasNext方法判断。

由此可以看出JavaScript和Java中Iterable接口很相似,实现了该接口的对象都可以在一种for-each机制中使用,而且都包含有功能类似的方法。Iterator接口也很相似,都提供了基本的next方法,用于迭代下一项。

最后,作比较是想说如果更明确的说明Iterable,Iterator,IteratorResult接口的话,可以让人看后更清晰一些,知道个来龙去脉,阮老师在文中的不同场景中多次使用了遍历器、指针这样的概念,容易让人搞不清概念。

Iterator

创建一个指针,指向当前数据结构的起始位置。也就是说,遍历器的返回值是一个指针对象。

这里遍历器就是指Iterable的[Symbol.iterator]方法了,而指针对象就是Iterator对象了。

完全可以写出没有对应数据结构的遍历器

根据后面的例子,我理解这里的遍历器是指实现了Iterator接口的对象了。

凡是部署了Symbol.iterator属性的数据结构,就称为部署了遍历器接口。

这里遍历器又指Iterable接口了

没有明确的说明Iterable,Iterator,IteratorResult接口而都用遍历器、指针来描述,感觉有点混乱。

最近,我总结整理了《JavaScript 高级程序设计》和 您的《ECMAScript 6入门》两本书的一些笔记,在整理这一部分的时候感觉比较困惑,所以整理时加进了三个接口的概念,并且用不同的表述代替了遍历器这种表述,感觉这样似乎可以清晰些了。

关于Iterator的译法,Java里译作迭代器,一些语言貌似也有相同的译法,如果别的语言中已经有了通用的译法,我觉得可以借鉴过来,也容易被理解接受。

最后,非常感谢阮老师开源了这本书,从中受益颇多。

from es6tutorial.

howiefh avatar howiefh commented on April 30, 2024

模块那一章,我看到您现在把console.log(exp(math.pi));中的pi改为了PI,但是circle和circleplus都没有看到这个变量,倒是Math有这个。是不是该是变量e。

from es6tutorial.

ruanyf avatar ruanyf commented on April 30, 2024

谢谢指出我用法上的混乱,这部分,我确实没考虑清楚。

经过你的梳理,我现在的想法如下。

(1)一个数据结构只要有Symbol.iterator属性,就称为“可遍历”(iterable)。

(2)Symbol.iterator属性的值等于一个函数,可以称为“遍历器生成函数”。

(3)调用“遍历器生成函数”(Symbol.iterator方法),会返回一个遍历器(iterator)

(4)这个遍历器是一个对象,相当于指针对象,调用它的Next方法,就可以移动指针。

我会根据上面的理解,修改原文。

至于math.PI,我只是想举个例子,引用Math对象的属性,使用math.E也可以。

from es6tutorial.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.