1. ホーム
  2. ジャバスクリプト

[解決済み】javascriptの[].slice.callの説明?

2022-04-05 11:17:09

質問

DOM NodeList を通常の配列に変換する、この巧妙なショートカットを偶然見つけたのですが、正直言って、これがどのように機能するのか完全に理解していません。

[].slice.call(document.querySelectorAll('a'), 0)

つまり、空の配列から始まります。 [] そして slice の結果を変換するために使用されます。 call を新しい配列に変換してください。

私が理解できないのは call . どのように変換するのですか? document.querySelectorAll('a') をNodeListから通常の配列に変更することはできますか?

どのように解決するのですか?

ここで起こっていることは、あなたが slice() の関数であるかのように NodeList を使って call() . 何 slice() この場合、空の配列を作成し、実行中のオブジェクト (元は配列、今は NodeList を作成し、そのオブジェクトの要素を作成した空の配列に追加し続け、最終的にそれを返します。以下は これに関する記事 .

EDITです。

つまり、空の配列 [] から始まり、スライスを使用して 呼び出しの結果を新しい配列に変換するのか?

それはおかしいですね。 [].slice は関数オブジェクトを返します。関数オブジェクトは関数 call() の最初のパラメータを割り当てた関数を呼び出します。 call()this 言い換えれば、関数がパラメータから呼び出されていると考えるようにするのです。 NodeList で返される document.querySelectorAll('a') ) からではなく、配列から取得します。