假设
socketMethods:{
update:function(data){
this.emit("test", data);
console.log("socket.update");
},
test:function(data){
this.emit("test", data);
console.log("socket.test");
}
}
下面这是可能的,并让我发出的“测试”和“更新”和“测试”和“更新”将被调用
socket.on("test", function(data){
dummy.socketMethods.test.call(socket, data);
});
socket.on("update", function(data){
dummy.socketMethods.update.call(socket, data);
});
下面这些是不可能的......每一个将改为调用“测试”,如果我发出的“测试”或“更新”。 如果我使用一个for循环中,所有的方法将成为所谓的“最后”的方法。
即:如果我切换更新和测试,使得测试是第一,和更新是第二在socketMethods对象。 “更新”总是被调用,不管我是否提出要“测试”或“更新”
for(key in dummy.socketMethods){
socket.on(key, function(data){
dummy.socketMethods[key].call(socket, data);
});
}
var methods = ["test", "update"];
while(methods.length !== 0){
var method = methods.pop();
console.log(method);
socket.on(method, function(data){
dummy.socketMethods[method].call(socket, data);
});
}
var methods = ["test", "update"];
for(var i = 0; i < methods.length; i++){
console.log(i);
socket.on(methods[i], function(data){
console.log(i);
dummy.socketMethods[methods[i]].call(socket, data);
});
}
线索:for循环使用“我”,有两个console.logs。 第二的console.log返回“2”
为什么会出现这种情况? 我怎么会用一个for循环附上我socketMethods?