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

时间:2014-09-03 22:25:19

标签: javascript

Array.prototype.join.call(arguments, '')arguments.join('')之间的区别是什么?为什么一个使用另一个?我一直在看第一种方法越来越多。

3 个答案:

答案 0 :(得分:1)

arguments.join不存在,因此存在明显的差异。 arguments不是数组,但它的行为类似于数组(具有数字属性和长度),因此可以使用Array.prototype.join.call手动对其使用数组方法。

答案 1 :(得分:1)

这个问题基于错误的前提。

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

答案 2 :(得分:1)

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

Array.prototype.join.call(arguments, '')

这意味着在Array.prototype中调用join方法,但是使用参数作为对象实例,或者将其称为“this”用于join方法调用。所以你看,即使参数对象中没有这个方法,我们也会误以为它是调用call方法的。这种技术很适合在这种情况下使用。注意:在这种情况下,参数实际上可以充当“this”或实例,因为它具有与任何普通Array对象相同的centain属性名称,因此将正确处理连接innocation。希望有帮助!! :)

相关问题