从模块外部调用函数 - 参数未正确传递

时间:2014-02-16 15:01:55

标签: javascript function module console

因此,当我尝试记录一组对象或数组而不只是说“object [object]”时,我试图使控制台日志更好,但是我在通过某些参数从模块调用函数时遇到问题。出于某种原因,这两者之间存在差异。

console.log(createMessage("Message: {0}", "hello")); //logs Message: hello
                                                     // (what I actually want)

specialConsole.writeLine("Message: {0}", "hello");   //logs ["Message: {0}", "hello"] 

第一个日志是从模块调用的,第二个是从外部调用的。这就是specialConsole.writeLine返回的内容:

writeLine: function () {
    console.log(createMessage(arguments));
}

所以我只是尝试调用第一个日志,但使用specialConsole.writeLine。对不起,如果我的问题太愚蠢,但我还是初学者。 Here is my full code in jsfiddle

2 个答案:

答案 0 :(得分:1)

当您将两个参数传递给writeLine时,arguments特殊变量将保存数组中的值,就像对象一样,并将它原样传递给createMessage,假定您实际上是传递数组并按原样打印数据。

要解决此问题,

writeLine: function () {
    console.log(createMessage.apply(null, arguments));
}

Function.prototype.apply函数将对象中的所有元素(如对象)作为单独的参数传递。

答案 1 :(得分:0)

我认为这两者之间的区别在于你将参数作为列表传递,而不是作为单独的参数传递。为了纠正你必须这样做:

writeLine: function () {
    console.log(createMessage(arguments[0], arguments[1]);
}

你看到了不同之处,但是这种方式并不是那么干净,如果你想传递更多的参数,你也需要扩展所有这些。

我建议扩展createMessage以接受数组。