我想做:
properties.email.value
不会触发如下错误:无法读取“未定义”的“值”
但是,我不想这样做:
properties.email &&properties.email.value
并且我不想使用助手,例如:get(properties, 'email.value')
.
我真的想保留语法properties.email.value
我可以通过这样做来解决这个问题:
Object.defineProperty(properties, 'email', {
get: () => properties.email && properties.email.value,
enumerable: true,
configurable: true
});
现在,getter
负责进行我的安全检查。完美。
但我也希望能够安全地执行 properties.name.value
。
但由于 properties
对象来自 API (json),我不知道可能的 properties
的完整列表。
那么,有没有办法将这种“神奇”的 get
语法用于任何 prop 访问,例如: properties[ANYTHING].value
?
最佳答案
好的,我有这样的东西。
但是您必须以这种方式创建属性
。
希望这有帮助:)
var properties = {
phone : {
value: "123456789"
}
}
var handler = {
get: function(target, name) {
return target.hasOwnProperty(name) ? target[name] : {};
}
};
var new_properties = new Proxy(properties, handler);
console.log("phone.value = " + new_properties.phone.value);
console.log("email.value = " + new_properties.email.value);
new_properties.email = {
value: 1
};
console.log("email.value after assign = " + new_properties.email.value);
文档引用 here 。
已编辑
即使原始 properties
对象未知,这种用法也同样有效。
关于javascript - 我们可以在 JavaScript 中为对象指定通用 getter 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50963215/