JavaScript 是动态的。酷!
我有以下构造函数:
function Preferences () {
this._preferences = {}
}
var obj = new Preferences()
我想实现这样的目标:
>>> obj.something = 'value'
>>> this._preferences['something']
'value'
也就是说,设置 obj 的属性实际上并没有设置它自己的属性,而是设置 obj._preferences 的属性。也就是说,我想覆盖默认行为。
可能吗?
编辑:我想对所有属性名称实现此目的,即要设置的属性的名称尚不知道。
最佳答案
Object.defineProperty(Preferences.prototype, 'something', {
get: function(){
return this._preferences.something;
},
set: function(value){
this._preferences.something = value;
}
});
应该这样做。它使用访问器属性而不是数据属性定义属性“something”,并将调用“get”和“set”函数来决定访问 .something
时执行的操作。
关于Javascript 覆盖属性设置功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30780551/