我希望将每个套接字消息的控制台日志发送到服务器,因此我快速包装了socket.io
socket.emit
函数
var self = this;
this.socket = io.connect();
this.socket._emit = this.socket.emit;
this.socket.emit = function(){
console.log(...arguments[0]);
self.socket._emit(...arguments);
};
除了一些奇怪的控制台日志打印外,它工作正常。这种情况发生在Chrome和Firefox上。发生了什么事?
我使用arguments[0]
代替...arguments[0]
解决了这个问题,但我还是很好奇......
答案 0 :(得分:3)
spread syntax当用作函数调用的参数时,会将单个字符串值分解为每个字符的单独参数。下面的例子应该说清楚。
var str = "abc";
console.log(str); // abc
console.log(...str); // a b c
console.log("a","b","c"); // a b c
var ary = [...str];
console.log(ary); // (3) ["a", "b", "c"]
showArgs(...str);
function showArgs(x, y, z){
console.log(x); // a
console.log(y); // b
console.log(z); // c
}

您为什么使用console.log(...arguments[0])
?您希望/期望使用...
在那里发生什么?