Array.prototype.slice.call(arguments) の内部動作の詳細
Array.prototype.slice の動作を理解します。 call(arguments) は、引数を本物の配列に変換するという表面レベルの使用を超えて、徹底的な探索を必要とします。
通常、slice() が配列に対して直接呼び出されると、その要素を反復処理します。配列。ただし、.call() と .apply() を使用すると、関数内で this の値を手動で定義できるユニークな機会が得られます。
Array.prototype.slice.call(arguments) の場合、配列数値の .length とインデックス付きプロパティを持つ、 -like オブジェクトは、これとして置き換えられます。この置換により、slice() が本物の配列を扱っていると想定され、通常の操作が容易になります。
固有の配列プロパティを持たないプレーン オブジェクトが .call() を使用してこのように設定される次の例を考えてみましょう。
var my_object = { '0': 'zero', '1': 'one', '2': 'two', '3': 'three', '4': 'four', length: 5 }; var sliced = Array.prototype.slice.call( my_object, 3 );
驚くべきことに、slice() は期待どおりに動作し、望ましい結果が得られます。
['three','four'];
引数オブジェクトが Array の this の値として渡される場合にも、同じメカニズムが適用されます。プロトタイプ.スライス.コール(引数)。引数には .length プロパティと数値インデックスの配列があるため、slice() は実数の配列を操作するかのように処理を進め、一貫性のある予測可能な結果を提供します。
以上がArray.prototype.slice.call(arguments) はどのように引数を配列に変換しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。