Javascript 如何理解[].copyWithin.call({length:5,3:1},0,3)

Javascript 如何理解[].copyWithin.call({length:5,3:1},0,3),javascript,Javascript,我刚开始学习JavaScript,我不知道如何理解以下代码(来自): console.log( [].copyWithin.call({length:5,3:1},0,3) )只要具有length属性和数字键,就可以使用任何具有函数#call的对象调用数组#copyWithin方法。MDN上的代码调用数组#copyWithin作为对象{length:5,3:1}作为它的this或实例值。它是该方法操作的“数组” 数组只是一个对象,是一个特殊的对象,具有长度和数字有序属性。同样的事情也在这里发生

我刚开始学习JavaScript,我不知道如何理解以下代码(来自):

console.log(
[].copyWithin.call({length:5,3:1},0,3)
)
只要具有
length
属性和数字键,就可以使用任何具有
函数#call
的对象调用
数组#copyWithin
方法。MDN上的代码调用
数组#copyWithin
作为对象
{length:5,3:1}
作为它的
this
或实例值。它是该方法操作的“数组”

数组只是一个对象,是一个特殊的对象,具有
长度
和数字有序属性。同样的事情也在这里发生。它们不是数组,而是通过传递一个带有
长度
和数字键的对象来“模拟”数组

由于数组和
{length:5,3:1}
:

  • 具有
    length
    属性
  • 有数字键
只要具有
length
属性和数字键,就可以使用任何具有
函数#call
的对象调用
数组#copyWithin
方法。MDN上的代码调用
数组#copyWithin
作为对象
{length:5,3:1}
作为它的
this
或实例值。它是该方法操作的“数组”

数组只是一个对象,是一个特殊的对象,具有
长度
和数字有序属性。同样的事情也在这里发生。它们不是数组,而是通过传递一个带有
长度
和数字键的对象来“模拟”数组

由于数组和
{length:5,3:1}
:

  • 具有
    length
    属性
  • 有数字键

在一个过于简化的示例中,它类似于:

var对象={length:5,3:1}
如果(object.length>3)
对象[0]=对象[3]
console.log(对象)

console.log(Array.prototype.copyWithin.call({length:5,3:1},0,3))
在一个过于简化的示例中,它类似于:

var对象={length:5,3:1}
如果(object.length>3)
对象[0]=对象[3]
console.log(对象)

log(Array.prototype.copyWithin.call({length:5,3:1},0,3))
我一直在努力理解它,但下面是我理解的

函数上的调用方法将接受3个参数。首先是一个对象,然后是两个接下来的参数,这两个参数是您正在调用的
call
方法所需的参数,在这种情况下,
copyin
数组函数。让我用更好的英语进一步澄清:)

基本上
。函数的call
方法将为该函数的
值发送一个对象。对于在数组上调用
copyWithin
方法的数组,
这个
基本上就是数组本身,它是一个具有长度的对象,以及它将通过索引和值指定的一些其他项。这里比较棘手的一点是,如果您传递了一些空项目,它们仍然会被视为长度。所以如果你通过了

{length:5, 3:1}
对于
[]
的空数组,您可以使用长度为5的数组,其中索引0、1和2(前三项)处的项为空,索引3处的项为1,最后一项为空。可以是这样的:

[empty,empty,empty,1,empty]
在函数的
call
方法中,第一个参数是分配的
this
参数,第二个和第三个参数是您传递以执行调用函数的参数,如我在开头所述

现在您有了一个包含5个项目的数组,这些项目都是空的,除了索引为3的第4个项目的值为1。发送
值后,您将传递(0,3)作为
copyWithin
的输入。您正在告诉
call
函数将0和3个参数传递给
copyin
数组函数,以便从数组的第一项复制到最后一项,这意味着您基本上是在告诉您
[空,空,空,3,空]
将索引0替换为索引3,将索引1替换为索引4,这样就完成了,因为您位于该数组的末尾。结果将是
[1,空,空,1,empy]
如果我们把它翻译成
这个
,它将是一个对象,长度为5,索引0将是1,索引3也将是1,其余的将是空的,这意味着

{0:1, 3:1, length:5}

我希望这能澄清这一点,如果我有误解,请纠正我。好问题

我一直在努力理解它,但以下是我所理解的

函数上的调用方法将接受3个参数。首先是一个对象,然后是两个接下来的参数,这两个参数是您正在调用的
call
方法所需的参数,在这种情况下,
copyin
数组函数。让我用更好的英语进一步澄清:)

基本上
。函数的call
方法将为该函数的
值发送一个对象。对于在数组上调用
copyWithin
方法的数组,
这个
基本上就是数组本身,它是一个具有长度的对象,以及它将通过索引和值指定的一些其他项。这里比较棘手的一点是,如果您传递了一些空项目,它们仍然会被视为长度。所以如果你通过了

{length:5, 3:1}
对于
[]
的空数组,您可以使用长度为5的数组,其中索引0、1和2(前三项)处的项为空,索引3处的项为1,最后一项为空。可以是这样的:

[empty,empty,empty,1,empty]
在函数的
call
方法中,第一个参数是分配的
this
参数,第二个和第三个参数是您传递来执行调用函数的参数,正如我在