我创建了一个函数,它返回一个存储数字的对象,以及一些操作数字的方法。
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()
的其他一些实例。
这里发生了什么?
答案 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}}