我正在尝试将一个setter定义为一种传递,它允许我检测底层属性的变化:
var x={}
Object.defineProperty(x, "_a", {
value:-1, writeable:true,
enumerable:true, configurable:true
})
Object.defineProperty(x, "a", {
enumerable: true, configurable: true,
get: function() { return this._a },
set: function(val) {
this._a=val;
console.log(this,"note:x.a=",val,"=",this._a)
}
})
This answer似乎暗示这种方法应该有用。
但是,当我尝试分配给“a”属性时,我无法设置“_a”,导致我的setter无用:
> {_a: -1} "note:x.a=" 1 "=" -1
< 1
如果我替换它所使用的对象之外的任何其他变量,但这是不可取的,因为我必须有两个单独的对象,一个用于被监视的属性,另一个用于未被监视的属性。添加或删除监视时,我必须将值从一个复制到另一个,并且我必须为每个对象访问添加一个条件,以便在第一个对象失败时允许第二个对象查找。
我确保“_a”是可写的,我认为从阅读documentation应该是我需要做的全部。我错过了什么?