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

JS如何不改变对象结构解析JSON并赋值到自定义类实例

问题原因

你原来的写法错误地将JSON.parse()返回的普通JS对象直接赋值给了client1变量,覆盖了之前创建的Client类实例,自然丢失了类定义的额外属性和getter/setter。另外你提供的Client类本身存在语法错误:实例属性访问需要加this,且你定义的属性名是name_/age_/something_,但getter/setter里访问的是_name/_age,属性名不匹配,会触发未定义变量报错。

修复步骤

1. 先修正Client类的语法错误

class Client {
    name_ = null;  
    age_ = null;
    something_ = null;

    get Name() {
        return this.name_; 
    }
    set Name(val) {
        this.name_ = val; 
    }
    get Age() {
        return this.age_; 
    }
    set Age(val) {
        this.age_ = val; 
    }
    get Something() {
        return this.something_; 
    }
    set Something(val) {
        this.something_ = val; 
    }
}

2. 正确合并JSON数据到类实例

不要覆盖实例,而是使用Object.assign将JSON解析出的属性批量赋值到已创建的Client实例上,会自动触发对应的setter:

let client1 = new Client();
let js = `
{
    "Name": "Estes Benjamin",
    "Age": 31
}
`; 
// 把解析出的对象属性合并到client1实例,而不是覆盖变量
Object.assign(client1, JSON.parse(js));
console.log(client1); 

此时输出就会符合你的预期,包含something_: null的属性,同时保留类的所有getter/setter结构。

可选:更规范的封装方案

可以给Client类加静态方法专门处理JSON反序列化,复用性更强:

class Client {
    // ... 上面的属性和getter/setter不变
    static fromJSON(jsonStr) {
        const instance = new Client();
        Object.assign(instance, JSON.parse(jsonStr));
        return instance;
    }
}

// 使用时直接调用即可
const client1 = Client.fromJSON(js);

内容的提问来源于stack exchange,提问作者lzaek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:36:02