gpt4 book ai didi

javascript - 我们可以在 JavaScript 中为对象指定通用 getter 吗?

转载 作者:行者123 更新时间:2023-11-28 13:00:37 25 4
gpt4 key购买 nike

想做:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com