推定
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オブジェクトで、テストが最初で、更新が2番目になるように、更新とテストを切り替えた場合です。「テスト」または「更新」のどちらを要求したかに関係なく、「更新」は常に呼び出されます
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ループには、2つのconsole.logがあります。2番目のconsole.logは「2」を返します
なぜこれが起こるのですか?そして、forループを使用してsocketMethodsをアタッチするにはどうすればよいですか?