JavaScript对象引用

时间:2015-02-06 09:06:05

标签: javascript

所以,我对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;
}

2 个答案:

答案 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,因此对于动态获取属性非常有用。