Javascript-将类实例保存到哈希表/对象中并使用键实例函数

问题描述 投票:0回答:2

我有两个Key和Session类,它们在每个类实例上输出唯一的“ 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)
        }
    }
})()

我有一个第三类管理器,将{Key:Session}实例对添加到对象/哈希表:

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()

        }
    }

}

有两个问题:

1]在任何给定时间,哈希表/对象仅具有1个{Key:Session}对。不管多少我进行的addSession()调用。是因为将所有Key实例都视为相同?我该如何解决。

2)在Manager类的printSessions()函数中,我似乎无法打印出密钥使用我在密钥类中定义的key.printKey()?这是为什么?我也试过console.log(key.key)也不起作用。

javascript ecmascript-6 instance javascript-objects es6-class
2个回答
0
投票

您正在尝试使用Key类的实例作为对象属性名称。那行不通;属性名称始终是字符串,因此对象(Key对象)将隐式转换为字符串。这总是导致字符串“ [object Object]”。


0
投票
您调用实例key并且该实例还具有名为key的属性的事实可能是您导致此错误的原因。
© www.soinside.com 2019 - 2024. All rights reserved.