2011-01-09 108 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); 
}