雄辩的 Javascript 练习 6.3 - 序列接口
Eloquent Javascript Exercise 6.3 - Sequence Interface
我刚从Web开发训练营毕业,目前正在研究Eloquent Javascript。在这次演习之前,事情进展得相当顺利。有人可以为我分解吗?我不确定为什么每个序列的起始位置都设置为"-1"。
问题来了:设计一个对值集合进行抽象迭代的接口。提供此接口的对象表示一个序列,并且该接口必须以某种方式使使用此类对象的代码能够遍历序列,查看它所组成的元素值,并有某种方法来找出何时到达序列的末尾。
指定接口后,尝试编写一个函数 logFive,该函数采用序列对象并调用控制台.log在其前五个元素上 - 如果序列的元素少于五个,则更少。
然后实现一个对象类型 ArraySeq,该对象类型包装数组并允许使用您设计的接口对数组进行迭代。实现另一个对象类型 RangeSeq,它遍历一系列整数(从参数到其构造函数
)。和解决方案:
function logFive(sequence) {
for (var i = 0; i < 5; i += 1) {
if (!sequence.next()) {
break;
}
console.log(sequence.current());
}
}
function ArraySeq(array) {
this.pos = -1;
this.array = array;
}
ArraySeq.prototype.next = function() {
if (this.pos >= this.array.length - 1) {
return false;
}
this.pos += 1;
return true;
}
ArraySeq.prototype.current = function() {
return this.array[this.pos];
}
function RangeSeq(from, to) {
this.pos = from - 1;
this.to = to;
}
RangeSeq.prototype.next = function() {
if (this.pos >= this.to) {
return false;
}
this.pos += 1;
return true;
}
RangeSeq.prototype.current = function() {
return this.pos;
}
logFive(new ArraySeq([1, 2]));
// → 1
// → 2
logFive(new RangeSeq(100, 1000));
// → 100
// → 101
// → 102
// → 103
// → 104
该位置最初设置为 -1
以允许您编写如下代码:
while (iter.next())
console.log(iter.current());
在具有从 0 开始的数组(如 JavaScript)的语言中,0
指向第一项,因此您需要一些其他值,以防数组为空,而-1
恰好是一个方便的值。
那是因为RangeSeq.prototype.next
将使用不能产生0
的this.pos += 1;
。
相关文章:
- 如何使用外部接口将参数从 JavaScript 传递到 AS3
- JavaScript中可链接的、基于Promise的类接口
- 显示从接口上的数据库(JavaScript/HTML/SQLite)获取的结果
- 如何对调用服务器的 JavaScript 文件进行外部接口调用以获取信息
- 具有 Javascript 同步接口的异步操作
- Javascript 接口回调在 android webview API 中不起作用 >= 21 与 GWT 2.7 j
- ActionScript3 (AS3) 外部接口调用 javascript/jquery 函数不起作用
- JavaScript 接口找不到函数
- 如何检查WebView Javascript接口是否可用
- 如何使用 JavaScript 中的 FileReader 接口读取文件类型
- 嵌入 Chakra JavaScript 引擎无法初始化 COM 接口
- 从 JavaScript 数组创建接口类型列表
- 安卓系统,使用javascript接口从webview中提取javascript变量
- 可以使用JavaScript FileReader接口更新和读取文件吗
- 将对象从Javascript传递到基于C++/CX接口的C++/CX-Windows运行时组件
- 有没有一个javascript引擎(运行时);t实现Timers接口
- 通过Android javascript接口从HTML传递图像
- Javascript中的节点接口是一个对象吗?
- javascript与arduino的接口
- 有没有一种方法可以编写javascript接口需求