javascript - 是否可以在 Javascript 对象上定义“全局”getter/setter 方法,以便在获取/设置任何属性时调用它?
问题描述
假设我们有一个对象:
const obj = {
foo: bar,
boop: "beep",
}
现在,我想添加一些在此对象中设置属性(实际上也针对此问题)时发生的功能。让我们保持简单,并说添加的功能只是一个console.log("a set/get action was just triggered on obj!")
.
我怎样才能做到这一点?
高级扩展:
命名设置的属性和设置它的值。
为了清楚起见,一些示例行为:
// simple:
obj.foo = "not bar anymore!";
// console output: a set/get action was just triggered on obj!
obj.rand = "a randomly added prop here";
// console output: a set/get action was just triggered on obj!
// advanced:
obj.boop = "burp";
// console output: a set/get action was just trigged on obj with prop: "boop", value: "burp".
obj.newRand = "a new randomly added prop here";
// console output: a set/get action was just trigged on obj with prop: "newRand", value: "a new randomly added prop here";
奖金:
欢迎任何其他解决此问题的方法。
解决方案
请改用带有 getter/setter 陷阱的Proxy对象。
Proxy 对象中的陷阱允许您使用自定义功能插入对象方法,同时在流程结束时返回实际对象数据。
代码示例:
const obj = {
foo: 'bar',
boop: "beep",
};
const objProx = new Proxy(obj, {
get(obj, prop) {
console.log('On obj', obj, 'getting', prop);
return obj[prop];
},
set(obj, prop, newVal) {
console.log('On obj', obj, 'setting', prop, 'to', newVal);
return obj[prop] = newVal;
},
});
objProx.boop = "burp";
objProx.newRand = "a new randomly added prop here";
// invokes getter:
objProx.foo;
推荐阅读
- java - 如何从for循环中的行尾删除空格
- android - 如何正确更新已弃用的 Android BillingFlowParams 方法
- r - 如何将多个反应值和闪亮输出设置为 NULL?
- javascript - 将类添加到活动选项卡 && 将类 inActive 添加到非活动选项卡
- jenkins - Jenkins取消api返回302但不取消排队的作业:(未启动且仍处于挂起状态的作业)
- java - 在 UI 线程中声明一个字符串数组,然后从后台线程填充它
- mysql - mysql中的触发器插入多行而不是一行
- c - base64 在中间停止解码
- image - 如何使用 Slick Slider 为移动设备加载不同的图像?
- c# - 客户显示器使用十六进制代码进行文本滚动