对象不更新属性

时间:2018-05-22 19:47:40

标签: javascript

我创建了一个函数,它返回一个存储数字的对象,以及一些操作数字的方法。

const StoreX = (x) => ({
  x,
  add1: () => x + 1,
  inc1: () => { x += 1; },
  getX: () => x,
});

const value = StoreX(10);

如果我多次运行value.add1(),它总会返回11。当我检查value对象时,其x属性仍为10.这是预期的,因为add1()只返回x + 1

我希望inc1()方法更新对象的x属性。但是当我运行value.inc1()几次时,结果并不是我所期望的。

value.inc1(); // value.x === 10
value.inc1(); // value.x === 10
value.getX(); // 12

所以不知怎的value.x仍然是10.但是如果我运行value.getX(),我确实得到了#34;正确的" 12。因此,inc1()似乎正在更新只能由x检索的getX()的其他一些实例。

这里发生了什么?

1 个答案:

答案 0 :(得分:4)

正如@ 4castle所说,你的函数更新了.x变量(由参数声明)而不是function StoreX(x) { return { get x() { return x; }, add1: () => x + 1, inc1: () => { x += 1; }, getX: () => x, }; } 对象属性。

您必须使用吸气剂才能使物业生效

function StoreX(x) {
  return {
    x,
    add1() { return this.x + 1 },
    inc1() { this.x += 1; },
    getX() { return this.x },
  };
}

或使用属性而不是变量

的方法
{{1}}