JavaScript setter更新引用的内部值,但返回值不正确。
var Game =
{
get points() {
return this._points;
},
set points(x){
x = Math.min(x,25);
this._points = x;
return this._points;
}
};
Game.points = 10 ;
console.log(Game.points); // outputs 10
var updatedPoints = (Game.points = 60);
console.log(updatedPoints); // outputs 60
console.log(Game.points); // outputs 25
' updatedPoints'的预期价值25岁了!
知道为什么会这样吗?你能否建议是否有办法解决这个问题?
解决此问题的原因:确保JS代码按预期执行,可维护性!
答案 0 :(得分:6)
JavaScript simple assignement(=
)根据规范(11.13.1)返回正确的值。此行为忽略了setter中发生的任何验证。
来自规范:
生产 AssignmentExpression : LeftHandSideExpression = AssignmentExpression 评估如下:
- 让 lref 成为评估 LeftHandSideExpression 的结果。
- 让 rref 成为评估 AssignmentExpression 的结果。
- 让 rval 为GetValue( rref )。
- 如果满足以下条件,则抛出 SyntaxError 异常:
- 类型( lref )是参考 true
- IsStrictReference( lref ) true
- 类型(GetBase( lref ))是环境记录
- GetReferencedName( lref )是“ eval ”或“参数”
- 调用PutValue( lref , rval )。
- 返回 rval 。
醇>
所以没有办法按照设计“修复”你的问题。检查Game.points
就足够了。