0
function list() {
  return Array.prototype.slice.call(arguments, 0); //Here is my problem
}

var list1 = list(1, 2, 3); // [1, 2, 3]

このスライス関数の使用例をオンラインで見つけました。「arguments」プロパティを使用して list に渡される各項目に call() 関数がどのようにアクセスできるかを理解するのに役立ちます。

単一の「引数」プロパティを関数コンテキストとして slice() に渡す方法がわかりません。どこかで行われている再帰が欠けていますか?

4

1 に答える 1

1

この関数は、提供された引数オブジェクトを配列に変換します。

関数の call メソッドが呼び出されると、関数内のthisが提供されたオブジェクトに設定されます。それを呼び出す別の方法は次のとおりです。

[].slice.call(arguments);

したがって、スライス メソッド内では、これは式の先頭にある空の配列ではなく、引数オブジェクトです。

渡されたオブジェクトがネイティブ オブジェクトでない場合 (NodeList などの DOM オブジェクトなど)、使用中の一部のブラウザーでは失敗するため、これはお勧めできません。また、これは「コンテキスト」ではなく、単に関数の実行コンテキストの 1 つのパラメーターです。

于 2013-10-14T01:11:06.740 に答える