Javascript 如何为现有对象设置常规getter?

Javascript 如何为现有对象设置常规getter?,javascript,object,ecmascript-6,default-value,ecmascript-next,Javascript,Object,Ecmascript 6,Default Value,Ecmascript Next,我对添加公共getter感兴趣,它将在现有对象的每个属性get调用上执行。 我们都知道如何为特定属性设置getter,但我们能设置getter吗?在获取对象中的每个属性时,将涉及哪个回调 非常感谢。我想你正在考虑一个新的方案 具体来说,您可以使用截取任何属性 实例 const吉他={ stringCount:6, 型号:“Stratocaster”, }; //这就是魔法发生的地方 常量genericHandler={ 获取:函数(目标,propertyName){ //在这一点上,您可以做任何

我对添加公共getter感兴趣,它将在现有对象的每个属性get调用上执行。 我们都知道如何为特定属性设置getter,但我们能设置getter吗?在获取对象中的每个属性时,将涉及哪个回调


非常感谢。

我想你正在考虑一个新的方案

具体来说,您可以使用截取任何属性

实例
const吉他={
stringCount:6,
型号:“Stratocaster”,
};
//这就是魔法发生的地方
常量genericHandler={
获取:函数(目标,propertyName){
//在这一点上,您可以做任何您想做的事情–我们将只记录尝试
log(`trusted to get${propertyName}`);
//这将返回原始值
返回目标[propertyName];
}
};
const proxiedGuitar=新代理(吉他、genericHandler);
//这个输出
//试图获取stringCount
//   6
console.log(proxiedGuitar.stringCount);
//您甚至可以为不存在的属性编写处理程序
console.log(proxiedGuitar.pickupType);

这是一个简化且不完整的示例,在某些情况下可能不起作用。请参阅下面评论中@loganfsmyth的说明。

您需要一个用于此目的的文件。如果它明确需要使用现有对象,则这是不可能的。代理可以做到这一点,但需要一个新的对象,而且代理相当复杂,在我看来通常不是一个好主意。您希望getter做什么?这是一个糟糕的
get
处理程序
get
传递了3个参数,因此您应该使用
Reflect.get
查找要返回的属性。这也是一个不完整的代理膜,因此您应该提到,在许多情况下,这会损坏,例如
吉他
对象存储在weakmap中,或者是使用私有类属性的类。@loganfsmyth感谢您的澄清!你说得对。我的意图并不是提供产品代码(尽管这可能是这个网站的许多用户所期望的…),只是对一个简单问题的简单回答——引入代理的概念。