【发布时间】:2012-10-19 07:17:59
【问题描述】:
假设
socketMethods:{
update:function(data){
this.emit("test", data);
console.log("socket.update");
},
test:function(data){
this.emit("test", data);
console.log("socket.test");
}
}
以下是可能的,并且允许我发出“test”和“update”,并且将调用“test”和“update”
socket.on("test", function(data){
dummy.socketMethods.test.call(socket, data);
});
socket.on("update", function(data){
dummy.socketMethods.update.call(socket, data);
});
以下这些是不可能的......如果我发出“test”或“update”,每个人都会改为调用“test”。如果我使用 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);
});
}
CLUE:使用'i'的for循环有两个console.logs。第二个 console.log 返回“2”
为什么会这样?以及如何使用 for 循环来附加我的 socketMethods?
【问题讨论】:
标签: javascript node.js sockets socket.io