假設socket.io使用for循環添加socket.on方法
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?
因爲這篇文章,我不認爲我可以甚至開始 - 表達我將要學習關閉多少。這工作 - 很簡單,甚至沒有運行兩次。 – iNk