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

为何JavaScript对象中的count属性无法被持久修改?

为何无法修改count的值?

先看你的代码:

console.log("hello");

var data = {
    data() {
        return { count: 0 };
    },
    plus() {
        return ++this.data().count;
    },
};

console.log(data.data().count); //0
console.log(data.plus()); //1
console.log(data.data().count); //0

问题核心很直白:每次调用data()方法,都会生成并返回一个全新的{ count: 0 }对象。

  • 第一次打印data.data().count,拿到的是刚生成的新对象的count,值为0
  • 调用plus()时,this.data()又创建了一个临时对象,你对这个对象的count做了自增并返回1,但这个对象用完就被丢弃了,根本没和持久状态挂钩
  • 第三次打印data.data().count,再次生成新对象,count还是初始的0

解决办法

要保持状态一致,得把状态存在对象的固定属性里,而非每次返回新对象。这里给两种常见写法:

写法1:用独立属性存储状态

console.log("hello");

var data = {
    _count: 0,
    data() {
        return { count: this._count };
    },
    plus() {
        return ++this._count;
    },
};

console.log(data.data().count); //0
console.log(data.plus()); //1
console.log(data.data().count); //1

写法2:始终返回同一个状态对象

console.log("hello");

var data = {
    _state: { count: 0 },
    data() {
        return this._state;
    },
    plus() {
        return ++this.data().count;
    },
};

console.log(data.data().count); //0
console.log(data.plus()); //1
console.log(data.data().count); //1

内容的提问来源于stack exchange,提问作者M.Jumman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:32:18