3

なぜ次のように配列をスライスするのでしょうか。

Array.prototype.slice.call(arr, 3);

単純に:

arr.slice(3);

?

プロトタイプと呼び出しを使用する利点は何ですか?

ありがとう!

4

1 に答える 1

5

「arr」が配列ではなく、配列のようなものである場合、重要な利点が実現されます。具体的には、「長さ」プロパティと数値キーのプロパティを持つものです。良い例はarguments、DOM のオブジェクトと NodeList オブジェクトです。これらのものには「スライス」メソッドはありませんが、数値キーのプロパティと「長さ」プロパティがあります。

「スライス」メソッドはかなり寛容であるため、このトリックは機能します。

間違いなくすでに配列である何かで使用されている場合は、混乱した人によって書かれたコードを見ています:)

ああ、ショートカットは次のとおりです。

var foo = [].slice.call(arguments, 0);

プロトタイプに直接アクセスしたくない場合は、直接アクセスする必要はありません。配列インスタンスからも簡単に取得できます。(はい、ダミーの割り当てが必要ですが、この時代では、VM がそれを最適化しても驚かないでしょう。)

于 2013-08-10T18:55:21.477 に答える