所以,我对JavaScript很陌生,虽然我知道用Java做这样的事情的小技巧但同样的技巧并不适用于此,或者至少我不能真正弄清楚如何使用它们,所以我目前正在以集合的形式使用两个对象:
var ConnectedClients_socket = {};
var ConnectedClients_networkId = {};
保持键/值对以将networkID
链接到客户端,然后保存将套接字用作键的重复对象。任何优化都会很棒,我会在整个应用程序中通过套接字和ID抓取客户端。
关于问题:
断开连接后,我需要从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;
}
答案 0 :(得分:2)
行情?
Client.ConnectedClients_socket['socket']
但是,这里没有必要使用这种表示法。
Client.ConnectedClients_socket.socket
很好。
括号表示法可用于访问具有特殊字符或变量值的成员。
Client.ConnectedClients_socket['someArr[]']
或
var x = 'socket';
Client.ConnectedClients_socket[x]
答案 1 :(得分:1)
你需要在那里使用点符号。
delete Client.ConnectedClients_networkId[Client.ConnectedClients_socket.socket.getNetworkId()];
括号表示法会将其解析为JavaScript,因此对于动态获取属性非常有用。