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

标签 javascript object getter

想做:

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/

相关文章:

javascript - Rails 4 - 如何在 vendor 文件中引用 javascript 源

.net - 导致这种 VB.NET 允许的类似 VB6 的气味出错 : WinFormType. InstanceProp=Value [DISABLE My.Forms]

actionscript-3 - AS3 : Not possible to have getters and setters for same variable in different interfaces?

java - 获取另一个类的变量值

javascript - 如何检查鼠标是否仍在 Javascript 中的元素上

javascript - AngularJs:错误:[ng:areq] 参数 'fn' 不是函数,未定义

javascript - Node.js:异步回调困惑

javascript - "that"变量未引用正确的对象

javascript - 仅当数组中尚不存在该对象时才将其添加到数组中

javascript - 使用 getter 和 setter 的意外行为