ホームページ  >  記事  >  ウェブフロントエンド  >  Array.prototype.slice.call はどのように引数を配列に変換するのでしょうか?

Array.prototype.slice.call はどのように引数を配列に変換するのでしょうか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-21 22:02:30316ブラウズ

How Does Array.prototype.slice.call Transform Arguments into Arrays?

Array.prototype.slice.call のメカニズムを明らかにする

Array.prototype.slice.call は、次のことを可能にする多用途ツールです。引数を本物の配列に変換する機能。ただし、この変換の背後にある根本的なメカニズムは謎に思えるかもしれません。

通常の状況では、.slice() を呼び出すとき、関数はその入力が配列であることを期待します。この配列を反復処理し、細心の注意を払って操作を実行することで処理が進みます。

このプロセスの興味深い点は、引数に適用されたときの .slice() の奇妙な動作です。通常、引数は配列そのものではありません。むしろ、配列のような構造を持ち、 .length プロパティとさまざまな数値インデックスを備えています。これにより、.slice() に引数が配列であると想定できる柔軟性が与えられ、操作をシームレスに実行できるようになります。

この変換の鍵は call() メソッドと apply() メソッドにあります。これらのメソッドを使用すると、関数の this 値を特定のオブジェクトに手動で割り当てることができます。 this 値を配列のようなオブジェクトに設定することで、基本的に .slice() をだまして実際の配列を操作していると信じ込ませます。

この概念を説明するために、次の単純なオブジェクトを考えてみましょう。

var my_object = {
    '0': 'zero',
    '1': 'one',
    '2': 'two',
    '3': 'three',
    '4': 'four',
    length: 5
};

my_object は配列ではありませんが、.slice() を次の値として設定することでその値を抽出できます。

var sliced = Array.prototype.slice.call( my_object, 3 );

コンソール出力から明らかなように、結果は配列には目的の要素が含まれています:

['three','four'];

本質的に、Array.prototype.slice.call を引数オブジェクトとともに使用する場合、仕組みは同じです。引数オブジェクトは、配列ではないにもかかわらず、その構造を十分にミラーリングして、 .slice() をだまして配列であるかのように操作を実行させます。

以上がArray.prototype.slice.call はどのように引数を配列に変換するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。