2012-07-20 156 views
7

我一直在尋找一些流行的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

回答

1

我個人建議你只使用.apply()當你必須:.apply()是傳遞數組作爲函數參數的唯一方法。如果你不需要需要來傳遞一個數組,那麼就使用console.log()。它不那麼冗長,而且是直接調用。

+0

那麼,我就是這麼想的,但認識JS比我更好的人不會這樣做,所以我想知道爲什麼。 – 2013-01-02 18:21:40

0

請注意,apply需要一個數組的論據!

因此呼籲console.log(args)必須console.log.apply(console, [args]),不console.log.apply(console, args)表現平等 - 在數組中的例子中,每個項目變成他自己的申請理由。

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