通过原型调用方法与直接在JavaScript中调用方法

通过原型调用方法与直接在JavaScript中调用方法,javascript,Javascript,Array.prototype.join.call(arguments)、和arguments.join(“”)之间有什么区别?为什么一个使用一个而不是另一个?我一直看到第一个方法被越来越多地使用。参数。join不存在,因此存在明显的区别arguments不是数组,但其行为类似于数组(具有数字属性和长度),因此可以使用array.prototype.join.call对其手动使用数组方法。该问题基于错误前提 您不能使用参数.join(“”),因为参数没有这样的方法。arguments对象与数组有

Array.prototype.join.call(arguments)、
arguments.join(“”)
之间有什么区别?为什么一个使用一个而不是另一个?我一直看到第一个方法被越来越多地使用。

参数。join
不存在,因此存在明显的区别
arguments
不是数组,但其行为类似于数组(具有数字属性和长度),因此可以使用
array.prototype.join.call对其手动使用数组方法。该问题基于错误前提


您不能使用
参数.join(“”)
,因为
参数
没有这样的方法。
arguments
对象与数组有相似之处(例如整数属性、
length
属性),但它实际上不是数组。但是,这些相似性足以在其上使用数组原型的
join
方法。

不要将参数误认为数组,它类似于数组,但没有数组对象通常具有的所有方法或属性。例如,arguments对象中不存在联接,因此无法调用arguments.join()。但是我们知道Array.prototype中存在连接,所以我们可以调用它并将arguments对象作为调用实例与连接参数一起传递,如下所示:

Array.prototype.join.call(arguments, '')
这意味着在Array.prototype中调用join方法,但使用参数作为对象实例,或者称为“This”来调用join方法。因此,您可以看到,即使arguments对象中不存在该方法,我们也会产生一种错觉,认为它正在调用call方法。在这种情况下使用这种技术非常好。注意:在本例中,参数实际上可以充当“this”或实例,因为它具有与任何普通数组对象相同的centain属性名,因此可以正确处理连接初始化。希望有帮助!!:)