Array.prototype.slice.call の内部動作: 引数変換の謎を解く
Array.prototype.slice.call は一般的に知られています。 (arguments) は、引数を実際の配列として扱うことができるようにします。しかし、この変化の背後にある複雑な仕組みは多くの人にとって謎のままです。その機能を完全に理解するために、技術的な部分を詳しく掘り下げてみましょう。
通常、 .slice() メソッドを呼び出すとき、そのターゲットは配列です。配列を反復処理して、意図した操作を実行します。
しかし、実際の配列ではないものを使用して .slice() が呼び出された場合はどうなるでしょうか?ここで Array.prototype.slice.call の魔法が活躍します。
.call() メソッドを利用して、.slice() 関数の this 値を手動で定義します。これにより、以下に示す my_object のようなプレーンなオブジェクトであっても、配列に似た任意のオブジェクトを渡すことができるようになります。
var my_object = { '0': 'zero', '1': 'one', '2': 'two', '3': 'three', '4': 'four', length: 5 };
オブジェクトが .length プロパティを持ち、次の点で配列のように動作する限り。
次の例を考えてみましょう。
var sliced = Array.prototype.slice.call( my_object, 3 );
結果は、予想どおり ['three','four' です。 ]、.slice() がその場しのぎの配列から目的の要素をシームレスに抽出したことを示しています。
本質的に、Array.prototype.slice.call(arguments) はオブジェクト置換を利用して、.slice() 関数に次の機能を与えます。引数を本物の配列であるかのように処理します。これにより、引数を適切に動作する配列に変換してさらに操作できるようになります。
以上がArray.prototype.slice.call の引数変換の背後にあるメカニズムは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。