【发布时间】:2014-06-04 10:24:05
【问题描述】:
假设我有这个代码:
function test() {
this._units = {};
}
test.prototype = {
get units() { return this._units; },
set units(val) {
this._units = val;
for (var unit in this._units) {
if (this._units[unit] === 0)
delete this._units[unit];
}
}
};
现在,我可以通过以下方式分配一个单位:
x = new test();
x.units['foo'] = 1;
这一切都有效。但是,当我这样做时,
x.units['foo'] = 0;
// x.units = { 'foo' : 0 }
它不会按应有的方式从单元中删除foo。我该如何更改?
谢谢!
【问题讨论】:
-
第一个问题是setter不会被调用(你正在修改getter返回的对象的属性,而不是真正调用setter)。
-
+Qantas,我知道它没有被调用。我该如何解决这个问题?
-
把delete放到getter中,然后当你接下来尝试查看
x.units时,你会看到清空的版本。另一种方法是在x.units['foo'] = 1;之后执行x.units = x.units -
将删除部分放在 getter 中不起作用。我倾向于做
x.units['foo']++之类的事情 -
@user2195592 你必须把它放在之前
return
标签: javascript setter getter