如何为现有对象设置常规 getter?
How I can set general getter for an existing object?
我有兴趣添加公共 getter,它将在每个 属性 get 调用现有对象时执行。
我们都知道如何为特定的 属性 设置 getter,但是我们可以设置 getter 在获取对象中的每个 属性 期间将涉及的回调吗?
非常感谢。
我认为您正在考虑 Proxy。
具体来说,您可以使用handler.get()
拦截任何属性。
例子
const guitar = {
stringCount: 6,
model: 'Stratocaster',
};
// this is where the magic happens
const genericHandler = {
get: function(target, propertyName) {
// at this point, you can do anything you want – we'll just log the attempt
console.log(`Attempted to get ${propertyName}`);
// this will return the original value
return target[propertyName];
}
};
const proxiedGuitar = new Proxy(guitar, genericHandler);
// This outputs
// Attempted to get stringCount
// 6
console.log(proxiedGuitar.stringCount);
// you can even write a handler for non-existent properties
console.log(proxiedGuitar.pickupType);
这是一个简化且不完整的示例,在某些情况下可能无法正常工作。在下面的评论中查看@loganfsmyth 的说明。
我有兴趣添加公共 getter,它将在每个 属性 get 调用现有对象时执行。 我们都知道如何为特定的 属性 设置 getter,但是我们可以设置 getter 在获取对象中的每个 属性 期间将涉及的回调吗?
非常感谢。
我认为您正在考虑 Proxy。
具体来说,您可以使用handler.get()
拦截任何属性。
例子
const guitar = {
stringCount: 6,
model: 'Stratocaster',
};
// this is where the magic happens
const genericHandler = {
get: function(target, propertyName) {
// at this point, you can do anything you want – we'll just log the attempt
console.log(`Attempted to get ${propertyName}`);
// this will return the original value
return target[propertyName];
}
};
const proxiedGuitar = new Proxy(guitar, genericHandler);
// This outputs
// Attempted to get stringCount
// 6
console.log(proxiedGuitar.stringCount);
// you can even write a handler for non-existent properties
console.log(proxiedGuitar.pickupType);
这是一个简化且不完整的示例,在某些情况下可能无法正常工作。在下面的评论中查看@loganfsmyth 的说明。