我正在尝试为我的对象定义一个getter。但是,我也希望能够指向该setter的属性。
示例对象:
var obj = {
weight: 14
};
现在我想创建一个扩展此对象的函数,这样当它经典地称为obj.weight
时,将返回'14'。但是,我还想选择拨打obj.weight.unit
并获得'公斤'作为回报。
这就是我试图做的事情:
Object.defineProperty(obj, 'weight', {
get: function () {
return obj.weight;
},
'unit': 'Kilograms'
});
减轻体重,但减肥单位不起作用。此外,当我尝试在控制台中看到“obj”的上下文时,它只是不显示“unit”,就好像它不存在一样。
答案 0 :(得分:1)
Bergi是正确的,JS有这些基元的包装器对象。像Number对象一样。对于您的情况,我可能会提出如下解决方案;
var obj = { _weight : 14,
get weight(){ var n = new Number(this._weight+"");
n.unit = "kg";
return n;
},
set weight(v){ this._weight = v}
};
console.log(obj.weight); // returns a number object with PrimitiveValue of _weight property.
console.log(obj.weight.unit); // returns "kg"
// however you can still use obj.weight just like a primitive number in operations.
obj.weight = 40;
console.log(obj.weight / 4)
console.log(obj.weight.unit)
答案 1 :(得分:0)
你可以尝试:
var obj = {
weight: 14,
unit: 'km'
};
Object.defineProperty(obj, 'w', {
get: function() {
return obj.weight;
}
}
);
Object.defineProperty(obj, 'u', {
get: function() {
return obj.unit;
}
});
console.log(obj.w);
console.log(obj.u);