2017-05-26 3 views
0

Mozilla Developer Networkこれは元のリンクです。Array.prototype.copyWithin()についての例を理解するには?

私はMDNからArray.prototypeを学習しています。さて、私はArray.prototype.copyWithin()の例題に悩まされました。あなたのお手伝いをしてくれてありがとう。

たとえば、次のコードは私が理解でき、実行中の回答は私の答えと同じです。私は最初のコードが2番目のコードのように理解されていると思います。だから私は答えを知っている。

console.log([].copyWithin.call(new Int32Array([1, 2, 3, 4, 5]), 0, 3, 4)); // TypedArray => [4, 2, 3, 4, 5] 
console.log(new Int32Array([1, 2, 3, 4, 5]).copyWithin(0,3,4)); // TypedArray => [4, 2, 3, 4, 5] 

しかし、次のコードではわかりません。

console.log([].copyWithin.call({length: 5, 3: 1}, 0, 3)); // How to execute?

これらの例は、Mozillaの開発者ネットワークからです。

答えて

0

lengthプロパティと数値キーを持つ限り、のオブジェクトでArray#copyWithinメソッドを呼び出すことができます。 MDNのコードでは、Array#copyWithinがオブジェクト{ length: 5, 3: 1 }としてthisまたはインスタンス値として呼び出されます。メソッドが動作しているのは「配列」です。

の配列は単なるオブジェクトで、lengthと数値の順序付けられたプロパティを持つ特殊なオブジェクトです。ここでも同じことが起こっています。配列の代わりに、lengthのオブジェクトと数値キーを渡して配列を「嘲笑」しています。

アレイと{ length: 5, 3: 1 }両方のために同じ操作が起こる:

  • length財産
  • は、私が見数字キー
+0

を持っています。 '[] .copyWithin.call(Object、arguments)'のようなコードの場合、copyWithin()の引数はObjectのキーです。配列の代わりに、引数は配列のインデックスです。私はArrayの前のことについて狭い理解があった。たくさんありがとう。 – Huooo

関連する問題