Javascript 具有定义属性的Getter/setter

Javascript 具有定义属性的Getter/setter,javascript,object,properties,Javascript,Object,Properties,我正在尝试为我的对象定义一个getter。但是,我还希望能够指向该setter的属性 示例对象: var obj = { weight: 14 }; 现在我想创建一个扩展这个对象的函数,这样当它被经典地称为obj.weight时,将返回“14”。但是,我还想选择调用obj.weight.unit并获得“kg”作为回报 这就是我试图做的: Object.defineProperty(obj, 'weight', { get: function () { retur

我正在尝试为我的对象定义一个getter。但是,我还希望能够指向该setter的属性

示例对象:

var obj = {
    weight: 14
};
现在我想创建一个扩展这个对象的函数,这样当它被经典地称为
obj.weight
时,将返回“14”。但是,我还想选择调用
obj.weight.unit
并获得“kg”作为回报

这就是我试图做的:

Object.defineProperty(obj, 'weight', {
    get: function () {
        return obj.weight;
    },
    'unit': 'Kilograms'
});
获取重量是可行的,但获取重量单位并不可行。另外,当我试图在控制台中查看“obj”的上下文时,它不会显示“unit”,就好像它不存在一样。

您可以尝试:

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);

您可以参考文档:

Bergi是正确的,但是JS为原语提供了这些包装器对象。比如数字对象。对于你的情况,我可以提出如下解决方案

var obj={u权重:14,
get weight(){var n=new Number(this.u weight+“”);
n、 单位=“千克”;
返回n;
},
设置权重(v){this.\u weight=v}
};
控制台日志(对象重量);//返回原语值为_weight属性的数字对象。
控制台日志(对象重量单位);//返回“kg”
//但是,您仍然可以像在操作中使用原语数字一样使用obj.weight。
物体重量=40;
控制台日志(对象重量/4)

console.log(obj.weight.unit)
您打算用什么语法获取单位<代码>目标重量单位<代码>对象单位?您试图做的是不可能的。你不能让一个值同时是一个数字和一个具有
单位
属性的对象……所以这不是不可能的!(多么疯狂的语言!)@Nick Perkins是的,JS中有许多微妙之处,例如当使用
new
关键字实例化时,算术运算符将
Number
对象视为一个原语,而您可以自由附加它们的属性,因为它们实际上是对象。对我来说,这类似于哈斯克尔的一元行为。