2016-09-28 13 views
3

posts前には、どのようにArray.prototype.slice.call(arguments)仕事について話をしているが、適用するときにcall代わりapplyで使用しているなぜ私は得ることはありません配列のようなオブジェクトの場合は、callがコンマで区切られたオブジェクトのリストに使用されます。 argumentscallの代わりにapplyを使用する配列のようなオブジェクトではありませんか?Array.prototype.slice.call(引数)(引数が)

+2

'' call'の代わりに 'apply'を使ったとしても、' 'arguments''は[' thisArg']です(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply)、 'argsArray'ではなく、何も変更しません。 – user2357112

+0

あなたのリンクが壊れているので、あなたがそれを正しく読んでいるかどうかを知ることができません –

+1

あなたはこの投稿にリンクしていますか? [Array.prototype.slice.call()はどのように動作するのですか?](https://stackoverflow.com/questions/7056925/how-does-array-prototype-slice-call-work) –

答えて

3

あなたの代わりに一つ一つの配列にスライスする引数を渡すしたい場合には、差があります。あなたは方法2と5をスライスに渡すと、これらはあなたがインデックスにある項目にインデックス1でアイテムを取得したいことを示すために、スライス引数です。この方法で、ここで

[1, 2, 3, 4, 5, 6, 7] ---- our example arguments 
Array.prototype.slice.call(arguments, 2, 5); 

それを行うことができます。 4.だから、ほとんどの場合、それは3、4、5

Array.prototype.slice.apply(arguments, [2, 5]); 

になりますこれは、同じことを行いますが、スライスの引数は、配列で渡すことができます。

+0

私は引数を渡さない場合、適用して呼び出しは同じですか? – stackjlei

+1

はい、同じです。 btw。引数スライスを渡さないと、配列を呼び出すかどうかにかかわらず配列をコピーします。 – uRTLy

+0

http://jsbin.com/zigosa/edit?js,consoleここで調整できます:) – uRTLy

1

xが配列である場合、これらは同じである:

// find the "slice" method of an array and call it with "x" as its "this" argument 
x.slice(); 

// find the "slice" method of an array and call it with "x" as its "this" argument 
Array.prototype.slice.call(x); 

func.callの最初の引数は、このこの引数、または、関数内thisの値です。残りの引数は関数の引数です(この場合は何もありません)。

引数なしで呼び出されるsliceメソッドは、単に同じ内容の新しい配列を作成します。それはarguments配列ではないので、何のslice方法は、それ自体に添付していないので、しかし、我々はslice方法を取得するには二つの方法の第二を使用する必要があり、我々は我々がArray.prototype.slice.call(arguments)を行う際に何をしたいです配列、その後、ない配列何かにそれを適用します。

// find the "slice" method of an array and call it with "arguments", 
// which is *not* an array, as its "this" argument 
Array.prototype.slice.call(arguments);