2011-01-09 103 views
6

()的問題,我研究了下面的代碼登錄申請的JavaScript

console.log.apply(console, arguments); 

什麼是apply()這裏的目的是什麼?

爲什麼不只是console.log("message", arguments)

感謝。

回答

7

apply()函數調用另一個函數,給定的this值和arguments作爲數組提供。

原因隱式func.apply(obj, args)是確保內func()thisobj

8
console.log("message", arguments) 

調用log帶有兩個參數「message」和類似數組的對象參數。

console.log.apply(console, arguments); 

n參數,其中n是陣列狀的對象參數的長度調用它。換句話說,論據被解開成個別論點。該方法的上下文是console。例如: -

function foo(a, b, c) 
{ 
    console.log.apply(console, arguments); 
} 
foo(1,2,3); 

大致等同於:

console.log(1,2,3); 
+2

請解釋反對票。 – 2012-03-13 18:34:37

1

我認爲這兩個答案沒有解釋爲什麼。這種方式真正有光澤的使用來編程。

我不喜歡第一個投票的答案,我甚至不能理解它甚至讀了三次,第二個感覺不完整。

我認爲這種方式編寫的主要目的是在函數(或閉包)中使用它。

因此,這條線只在您的自定義記錄器中有意義:console.log.apply(console,arguments);

可能比寫這樣的一個更好的辦法:

function my_worse_way_to_log_dynamic_args ([several dynamic arguments]) 
{ 
    // loop each argument 
    // call console.log for each one 
} 

function my_better_way_to_log_dynamic_args ([several dynamic arguments]) 
{ 
    console.log.apply(console, arguments); 
}