Javascript 当类被放置在工厂函数之外时,为什么我不能访问uid和其他属性?

Javascript 当类被放置在工厂函数之外时,为什么我不能访问uid和其他属性?,javascript,class,scope,closures,private,Javascript,Class,Scope,Closures,Private,如果我在函数外部使用类TodoItem项,并改为写入return new TodoItem(),则无法访问uid和其他属性。我不知道为什么,因为对象是在函数内部创建的,所以它也应该将其纳入范围?我想 function TodoItemFactory(todoItem = {}) { const uid = todoItem.uid || utils.generateRandomString() const createdTime = todoItem.createdTime ||

如果我在函数外部使用类TodoItem项,并改为写入return new TodoItem(),则无法访问uid和其他属性。我不知道为什么,因为对象是在函数内部创建的,所以它也应该将其纳入范围?我想

function TodoItemFactory(todoItem = {}) {
    const uid = todoItem.uid || utils.generateRandomString()
    const createdTime = todoItem.createdTime || new Date()
    let title = todoItem.title || ''
    let modifiedTime = todoItem.modifiedTime || createdTime
    let isCompleted = todoItem.isCompleted || false
    let isDeleted = todoItem.isDeleted || false
    
    return new (class TodoItem {

        setTitle(newTitle) {
            title = newTitle
            this.setModifiedTimeToCurrentTime()
        }
    
        setModifiedTimeToCurrentTime() {
            modifiedTime = new Date()
        }
    
        setIsCompleted(bool) {
            isCompleted = bool
            this.setModifiedTimeToCurrentTime()
        }
    
        setIsDeleted(bool) {
            isDeleted = bool
            this.setModifiedTimeToCurrentTime()
        }
    
        getAllProperties() {
            return {
                uid, createdTime, modifiedTime, isDeleted, isCompleted, title
            }
        }
    })()
}
JavaScript具有词汇作用域,而不是动态作用域。如果将类定义移到函数之外,则
uid
,etc不再在类的范围内。FWIW,这里根本不需要使用类。大多数情况下,使用一个类只创建一个实例是错误的。另一方面,这个例子看起来不完整,所以很难给出如何真正改进的建议。