Javascript - 将 class 个实例保存到 hashtable/object 中并使用键实例函数
Javascript - Saving class instances into hashtable/object and using key instance function
我有 2 个 classes 密钥和会话,它们在每个 class 实例上输出唯一的 "this.session/this.key" 值:
//self executing function or IIFE(Immediately Invoked Function Expression)
//classes that return unique key and sessions on every instance
const Session = (() => {
let lastSession = 80
return class Session{
constructor(){
this.session = lastSession
lastSession++
}
printSession(){
console.log(this.session)
}
}
})()
const Key = (() => {
let lastKey = 0
return class Key{
constructor(){
this.key = lastKey
lastKey++
}
printKey(){
console.log(this.key)
}
}
})()
我有第三个 class 管理器,它将 {Key:Session} 实例对添加到 Object/Hashtable:
class Manager{
constructor(){
this.allSessions = {}
}
addSession(){
this.allSessions[new Key] = new Session
}
printSessions(){
for(let key in this.allSessions){
console.log(`${key} : ${this.allSessions[key]}`)
//key.printSession()
//console.log(key.key)
//this.allSessions[key].printSession()
}
}
}
有2个问题:
1) hashtable/object 在任何给定时间只有 1 个 {Key:Session} 对。不管多少
我进行的 addSession() 调用。这是因为它
将所有 Key 实例视为相同?我该如何解决这个问题。
2)在Manager class中的printSessions()函数中,我似乎无法打印出密钥
使用我在键 class 中定义的 key.printKey()?这是为什么?我也试过
console.log(key.key) 也没有用。
您正在尝试使用 Key
class 的实例作为对象 属性 名称。那行不通; 属性 名称始终是字符串,因此对象(Key
对象)被隐式转换为字符串。这总是导致字符串“[object Object]”。
您可以试试
this.allSessions[new Key().key] = new Session
Plain JavaScript objects 确实 seem 像哈希表,但键只能是字符串。您可能想探索地图类型。
您调用实例 key
并且该实例还有一个名为 key
的 属性 的事实可能是您犯此错误的原因。
此外,打印 this.allSessions[key]
并不是很有帮助,因为它是一个对象。也许你打算:this.allSessions[key].session
:
class Manager{
constructor(){
this.allSessions = {}
}
addSession(){
this.allSessions[(new Key).key] = new Session
}
printSessions(){
for(let key in this.allSessions){
console.log(`${key} : ${this.allSessions[key].session}`)
}
}
}
我有 2 个 classes 密钥和会话,它们在每个 class 实例上输出唯一的 "this.session/this.key" 值:
//self executing function or IIFE(Immediately Invoked Function Expression)
//classes that return unique key and sessions on every instance
const Session = (() => {
let lastSession = 80
return class Session{
constructor(){
this.session = lastSession
lastSession++
}
printSession(){
console.log(this.session)
}
}
})()
const Key = (() => {
let lastKey = 0
return class Key{
constructor(){
this.key = lastKey
lastKey++
}
printKey(){
console.log(this.key)
}
}
})()
我有第三个 class 管理器,它将 {Key:Session} 实例对添加到 Object/Hashtable:
class Manager{
constructor(){
this.allSessions = {}
}
addSession(){
this.allSessions[new Key] = new Session
}
printSessions(){
for(let key in this.allSessions){
console.log(`${key} : ${this.allSessions[key]}`)
//key.printSession()
//console.log(key.key)
//this.allSessions[key].printSession()
}
}
}
有2个问题:
1) hashtable/object 在任何给定时间只有 1 个 {Key:Session} 对。不管多少 我进行的 addSession() 调用。这是因为它 将所有 Key 实例视为相同?我该如何解决这个问题。
2)在Manager class中的printSessions()函数中,我似乎无法打印出密钥 使用我在键 class 中定义的 key.printKey()?这是为什么?我也试过 console.log(key.key) 也没有用。
您正在尝试使用 Key
class 的实例作为对象 属性 名称。那行不通; 属性 名称始终是字符串,因此对象(Key
对象)被隐式转换为字符串。这总是导致字符串“[object Object]”。
您可以试试
this.allSessions[new Key().key] = new Session
Plain JavaScript objects 确实 seem 像哈希表,但键只能是字符串。您可能想探索地图类型。
您调用实例 key
并且该实例还有一个名为 key
的 属性 的事实可能是您犯此错误的原因。
此外,打印 this.allSessions[key]
并不是很有帮助,因为它是一个对象。也许你打算:this.allSessions[key].session
:
class Manager{
constructor(){
this.allSessions = {}
}
addSession(){
this.allSessions[(new Key).key] = new Session
}
printSessions(){
for(let key in this.allSessions){
console.log(`${key} : ${this.allSessions[key].session}`)
}
}
}