【发布时间】:2014-12-22 07:21:33
【问题描述】:
我有以下代码:
var o = {};
o.a = 1;
var _value = 1;
Object.defineProperty(o,"a",{
set: function(value){
_value = value + 1;
console.log("log: ", value, _value);
return _value;
},
get: function(){
return _value;
}
});
在 setter 方法中,我在返回之前将 _value 加一。所以如果我设置o.a = 5,我希望控制台打印6(即使我意识到从setter返回一个值通常没有意义)。然而,如下面的 sn -p 所示,控制台打印出5:
> o.a = 5;
log: 5 6 // from console.log;
5 // return; why does it == value and not value + 1?
> o.a;
6
> var i = o.a = 5;
> i;
5
> o.a;
6
所以我的问题是为什么它返回 5 而不是 6?
我希望这不是因为我在代码中犯了一些愚蠢的错误。
【问题讨论】:
-
就像@Thilo 所说,在 setter 中返回不起作用。你可以把
return 100而不是return _value放在setter中,你不会得到100而是只有5(分配给i的值)
标签: javascript expression variable-assignment getter-setter