You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中多次实例化类后数据无法保留的问题及解决方法

问题原因

你当前的datas是实例属性,每次通过new Foo()(注:你调用代码里漏了new,这会直接报错,必须补上)创建新实例时,都会在构造函数里初始化一个全新的this.datas对象。foo1和foo2是两个完全独立的实例,它们的datas互不关联,所以foo2拿不到foo1存入的数据。

解决方案

要实现跨实例共享数据,需要把datas改成类级别的共享属性,有两种常用方式:

方式1:使用类静态属性

直接在Foo类中定义静态属性datas,所有实例都会共享这个属性:

class Foo {
    // 定义静态属性,所有Foo实例共享
    static datas = {}

    constructor() {
        // 无需再初始化实例专属的datas
    }

    set(key, data) {
        return Foo.datas[key] = data
    }

    get(key) {
        return Foo.datas[key]
    }
}

module.exports = Foo

方式2:使用模块级闭包变量

在模块作用域定义一个共享的datas变量,类的方法直接操作这个变量,外部无法直接访问,安全性更高:

// 模块级变量,仅当前模块内部可访问
const datas = {}

class Foo {
    constructor() {
    }

    set(key, data) {
        return datas[key] = data
    }

    get(key) {
        return datas[key]
    }
}

module.exports = Foo
修正调用代码

另外注意:你的调用代码里const foo1 = Foo()是错误的,类的构造函数必须用new关键字调用,否则会抛出错误,修正后的调用代码:

const Foo = require('./foo.js') // 假设你的类文件是foo.js
const foo1 = new Foo()
foo1.set('a', [1, 2, 3])
const foo2 = new Foo()
var aData = foo2.get('a')
console.log(aData) // 现在会输出 [1,2,3]

内容的提问来源于stack exchange,提问作者Ömer Faruk Demirel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:15:33