arguments
実際の を作成するために使用されることは知っていますArray
が、 を使用すると何が起こるのかわかりませんArray.prototype.slice.call(arguments);
。
ベストアンサー1
内部的には、.slice()
通常どおり呼び出されるとthis
配列になり、その配列を反復処理して作業を実行します。
this
関数内で.slice()
配列はどのようになっているのでしょうか? なぜなら、次のようにすると:
object.method();
... は自動的に のobject
の値になります。したがって、次のようになります。this
method()
[1,2,3].slice()
...配列はの[1,2,3]
値として設定されます。this
.slice()
しかし、値として何か他のものを代入できるとしたらどうでしょうかthis
? 代入するものが数値プロパティと数値インデックスである一連のプロパティを持っている限り、それは機能するはずです。このタイプのオブジェクトは、配列のようなオブジェクト.length
と呼ばれることがよくあります。
およびメソッドを使用すると、関数内の の値を手動で設定できます。したがって、内のの値を配列のようなオブジェクトに設定すると、は配列を操作していると想定し、.call()
その処理を実行します。.apply()
this
this
.slice()
.slice()
この単純なオブジェクトを例に挙げます。
var my_object = {
'0': 'zero',
'1': 'one',
'2': 'two',
'3': 'three',
'4': 'four',
length: 5
};
これは明らかに配列ではありませんが、this
の値として設定できる場合は.slice()
、 の配列のように見えるため、.slice()
正常に機能します。
var sliced = Array.prototype.slice.call( my_object, 3 );
コンソールでわかるように、結果は期待どおりです。
['three','four'];
オブジェクトをの値arguments
として設定すると、このようなことが起こります。 にはプロパティと一連の数値インデックスがあるため、は実際の配列を操作しているかのように動作します。this
.slice()
arguments
.length
.slice()