@basilikum が説明したように、これは.length
を使用するために必要なためです.slice()
。なぜそれが必要なのかを理解するためにArray.prototype.slice()
、MDN ドキュメントを読んだ後に独自のバージョンの を書いていると想像してください:
構文
Array.slice(begin[, end])
パラメーター
begin
抽出を開始するゼロベースのインデックス。
負のインデックスとしてbegin
、シーケンスの末尾からのオフセットを示します。slice(-2)
シーケンスの最後から 2 番目の要素と最後の要素を抽出します。
end
抽出を終了するゼロベースのインデックス。slice
までを抽出しますが、これを含みませんend
。
slice(1,4)
2 番目の要素から 4 番目の要素 (インデックス 1、2、および 3 の要素) を抽出します。
負のインデックスとしてend
、シーケンスの末尾からのオフセットを示します。slice(2,-1)
シーケンスの最後から 2 番目の要素から 3 番目の要素を抽出します。
end
を省略した場合slice
、シーケンスの最後まで抽出します。
これらすべてのケースとリストされていないいくつかのケースを処理するには、コードを次のようにする必要があります (これにはバグがあるかもしれませんが、近いはずです)。
Array.prototype.myslice = function( begin, end ) {
// Use array length or 0 if missing
var length = this.length || 0;
// Handle missing begin
if( begin === undefined ) begin = 0;
// Handle negative begin, offset from array length
if( begin < 0 ) begin = length + begin;
// But make sure that didn't put it less than 0
if( begin < 0 ) begin = 0;
// Handle missing end or end too long
if( end === undefined || end > length ) end = length;
// Handle negative end (don't have to worry about < 0)
if( end < 0 ) end = length + end;
// Now copy the elements and return resulting array
var result = [];
for( var i = begin; i < end; ++i )
result.push( this[i] );
return result;
};
そのため、.slice()
requires this.length
—これなしでは関数を書くことができません。