因此,当我尝试记录一组对象或数组而不只是说“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
答案 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以接受数组。