私は近年web devのブートキャンプを卒業しており、現在Eloquent Javascriptで作業しています。この運動の前に、物事はかなりスムーズに動いていました。誰かが私のためにこれを壊すことができますか?私はなぜ開始位置が各シーケンスの "-1"に設定されているのかよく分かりません。Eloquent Javascript Exercise 6.3 - シーケンスインターフェイス
ここに質問があります: 値のコレクションで反復を抽象化するインターフェイスを設計します。このインタフェースを提供するオブジェクトはシーケンスを表し、インタフェースは何らかの形でこのようなオブジェクトを使用するコードがシーケンスを反復することを可能にしなければならず、要素値を見て、配列の終わりに達する。
インターフェイスを指定したら、シーケンスオブジェクトを受け取り、最初の5つの要素でconsole.logを呼び出すlogFive関数を記述してください。
次に、配列をラップするオブジェクト型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に設定されている理由は? – user1620220