なぜ次のように配列をスライスするのでしょうか。
Array.prototype.slice.call(arr, 3);
単純に:
arr.slice(3);
?
プロトタイプと呼び出しを使用する利点は何ですか?
ありがとう!
なぜ次のように配列をスライスするのでしょうか。
Array.prototype.slice.call(arr, 3);
単純に:
arr.slice(3);
?
プロトタイプと呼び出しを使用する利点は何ですか?
ありがとう!
「arr」が配列ではなく、配列のようなものである場合、重要な利点が実現されます。具体的には、「長さ」プロパティと数値キーのプロパティを持つものです。良い例はarguments
、DOM のオブジェクトと NodeList オブジェクトです。これらのものには「スライス」メソッドはありませんが、数値キーのプロパティと「長さ」プロパティがあります。
「スライス」メソッドはかなり寛容であるため、このトリックは機能します。
間違いなくすでに配列である何かで使用されている場合は、混乱した人によって書かれたコードを見ています:)
ああ、ショートカットは次のとおりです。
var foo = [].slice.call(arguments, 0);
プロトタイプに直接アクセスしたくない場合は、直接アクセスする必要はありません。配列インスタンスからも簡単に取得できます。(はい、ダミーの割り当てが必要ですが、この時代では、VM がそれを最適化しても驚かないでしょう。)