Итак, я довольно новичок в JavaScript, и, хотя я знаю небольшие трюки, чтобы делать подобные вещи на Java, такие же трюки здесь не применяются, или, по крайней мере, я не могу понять как использовать их, так что я в настоящее время используют два объекта в виде коллекций:Объект JavaScript, ссылающийся на
var ConnectedClients_socket = {};
var ConnectedClients_networkId = {};
трюме пару ключ/значение, чтобы связать networkID
к клиенту, а затем дублированный объект, который использует сокет ключ. Любая оптимизация будет отличной, я буду хватать клиента сокетами и идентификаторами во всем приложении.
О проблеме:
После отключения нужно удалить экземпляр клиента из ConnectedClients_networkId
объекта. По моему мнению, это делается с использованием ключевого слова delete
.
Вот код, я в настоящее время пытается использовать для этого:
console.log('socket disconnected');
delete Client.ConnectedClients_networkId[Client.ConnectedClients_socket[socket].getNetworkId()];
delete Client.ConnectedClients_socket.socket;
Однако это дает мне следующую ошибку:
TypeError: Cannot call method 'getNetworkId' of undefined
, который показывает, что
Client.ConnectedClients_socket[socket]
Возвращает undefined, а Client.ConnectedClients_socket.socket
успешно удаляется. Я просмотрел несколько разных страниц о получении значения из ключа в JavaScript, и я не вижу, что я делаю неправильно.
Вот конструктор для клиента:
var Client = function(networkId, socket, ...) {
this.networkId = networkId;
this.socket = socket;
...
ConnectedClients_socket.socket = this;
ConnectedClients_networkId.networkId = this;
}
Хорошая работа, описывающая вашу проблему; +1. – Scimonster
Действительно, очень чистое описание. +1 –
Не является линией Client.ConnectedClients_socket [socket] .getNetworkId() должно быть Client.ConnectedClients_socket.socket.getNetworkId()? – Deshan