为什么console.log()填充不使用Function.apply()?

为什么console.log()填充不使用Function.apply()?

问题描述:

我一直在寻找一些流行的console.log()包装/ polyfills的:为什么console.log()填充不使用Function.apply()?

我注意到,所有的人都接受多个arguments,但他们全部做这样的事情:

console.log(arguments); 

导致输出像这样(在Chrome):

<code>console.log(['foo', 'bar', $('body')])</code>

然而,在现代浏览器,如Chrome或Firefox至少,console.log()也接受多个参数,所以,这将产生(恕我直言)优越输出:

console.log.apply(console, arguments) 

这导致输出像这样(在Chrome):

<code>console.log.apply(console, ['foo', 'bar', $('body')])</code>

为什么我应该避免使用带有多个参数的console.log.apply()有什么特别的理由吗?或者这只是一个品味或保存字节的问题?

+0

@PaulIrish上的console.log VS console.log.apply有什么想法? – 2012-08-22 18:56:07

+3

这可能不是主要原因,但IE中的console.log属性没有Function原型。即,它没有“应用”功能。 – Sam 2012-09-26 22:24:43

+1

呃,这可能是一个很好的理由。 – 2012-09-27 00:09:39

我个人建议你只使用.apply()当你必须:.apply()是传递数组作为函数参数的唯一方法。如果你不需要需要来传递一个数组,那么就使用console.log()。它不那么冗长,而且是直接调用。

+0

那么,我就是这么想的,但认识JS比我更好的人不会这样做,所以我想知道为什么。 – 2013-01-02 18:21:40

请注意,apply需要一个数组的论据!

因此呼吁console.log(args)必须console.log.apply(console, [args]),不console.log.apply(console, args)表现平等 - 在数组中的例子中,每个项目变成他自己的申请理由。

在另一方面,你也可以拨打console.log("foo", "bar", $("body"))