Javascript 如何理解[].copyWithin.call({length:5,3:1},0,3)
我刚开始学习JavaScript,我不知道如何理解以下代码(来自):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或实例值。它是该方法操作的“数组” 数组只是一个对象,是一个特殊的对象,具有长度和数字有序属性。同样的事情也在这里发生
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
参数,第二个和第三个参数是您传递来执行调用函数的参数,正如我在