从其他对象属性(动态)计算的 Javascript 对象属性

2023-12-08

我正在尝试创建一个 javascript 对象来计算其上设置的属性的各种值。我已经编译了这个简单的例子来说明我想要实现的目标:JSFIDDLE

var obj = {};
obj.a = 2;
obj.b = 5;
obj.avg = "(obj.a + obj.b)/2"; 
obj.rounded = "Math.floor(eval(obj.avg))";

console.log("rounded avg: " + eval(obj.rounded));
//simulate changing properties
obj.a = Math.floor(Math.random() * 10);
obj.b = Math.floor(Math.random() * 10);
console.log("rounded avg: " + eval(obj.rounded));

上面的代码目前实现了我想要的(使用“a”和“b”等标准设置值来计算“avg”,然后在第二次计算“四舍五入”中使用“avg”)。

有没有更好的方法来实现这一目标(理想情况下没有eval()每当计算属性在另一个属性中引用时调用)。

我希望计算的属性像函数一样工作(每当引用它们时计算它们的值),而不是最初计算它们的值并且不改变 - 我想避免使用()调用函数(这样我就可以以相同的方式引用普通值和计算值 - 只需通过它们的属性名称)。


而不是使用eval,使用函数如下:

var obj = {};
obj.a = 2;
obj.b = 5;
obj.avg = function() { return (this.a + this.b) / 2; };
obj.rounded = function() { return Math.floor(this.avg()); };

console.log("rounded avg: " + obj.rounded());
obj.a = Math.floor(Math.random() * 10);
obj.b = Math.floor(Math.random() * 10);
console.log("rounded avg: " + obj.rounded());

如果您不必支持旧浏览器,为了避免在调用函数时必须使用括号,您可以使用getters如下:

var obj = {
  a: 2,
  b: 5,
  get avg() { return (this.a + this.b) / 2; },
  get rounded() { return Math.floor(this.avg) }
}

console.log("rounded avg: " + obj.rounded);
obj.a = Math.floor(Math.random() * 10);
obj.b = Math.floor(Math.random() * 10);
console.log("rounded avg: " + obj.rounded);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从其他对象属性(动态)计算的 Javascript 对象属性 的相关文章

随机推荐

  • 使用嵌套和根级别数据的 Elasticsearch 嵌套聚合比率

    我感觉像是一个简单的聚合 我有一个文档 其计时代码如下 task start 2020 06 03T21 19 07 908821Z task end 2020 06 03T21 27 00 323790Z sub tasks key su
  • Visual Studio 2010下LNK2019错误

    我在 Visual Studio 2010 下使用以下文件创建了一个示例 C 项目 A h ifndef A H define A H include
  • 如何正确设置 ios 标志以进行流操作?

    我在 C 中输入了一个基本示例 其中我尝试将一个数字以十六进制形式打印到屏幕上 如下所示 include
  • IEnumerable 没有 Count 方法

    我有以下方法 public bool IsValid get return GetRuleViolations Count 0 public IEnumerable
  • 与 React 之外的功能组件通信

    我希望能够从正常 HTML 中的组件外部与我的 React 组件进行通信 由于将组件嵌入到另一个系统中而需要 我一直在研究这个 我看到了您可以添加组件的建议window通过在渲染的元素上添加引用 如下所示 ReactDOM render
  • 使用 Python 生成报告:PDF 或 HTML 到 PDF

    Using maptplotlib我创建了 9 个图表 使用命令将它们组合成一个 pdfsavefig 但是我需要能够在每个图下方显示统计分析 describe 最好的方法是什么 Pandas 可以包含一张带有绘图的表格 请参阅table夸
  • 为什么 DBI 会隐式地将整数更改为字符串?

    我有一个具有以下结构的 MySQL 表 alid bigint 20 ndip varchar 20 ndregion varchar 20 occ num int 3 Delta Flag int 1 从表中选择数据后 我将获取所有引用的
  • 最后使用 Javascript 加载一些图像

    嗨 我只是想知道这是否可能 我的网站上有很多图像 我已将它们设置为尽可能小的文件大小 有些图像用作幻灯片 但全部都一次性加载 有没有一种方法使用 javascript 使幻灯片图像最后加载 以便背景图像等首先加载 幻灯片最后加载 这些图像位
  • 访问路由器参数 VueJS

    我正在使用 Vuejs 创建一个博客 而且我对它还很陌生 简而言之 我有一个加载到屏幕上的动态元素列表 当您单击其中一个项目时 我想转到该页面以及其余数据 我遵循了与使用 React 时相同的流程 路由器 js export default
  • 将 numpy 整数数组传递给 c 代码

    我正在尝试编写 Cython 代码来将密集特征矩阵 目标向量对转储为 libsvm 格式 速度比 sklearn 的内置代码更快 我收到一个编译错误 抱怨将目标向量 整数的 numpy 数组 传递给相关 c 函数时出现类型问题 这是代码 i
  • 使用 dlib 进行狗脸检测 - 需要有关改进 recal 的建议

    我正在尝试使用 dlib 的猪金字塔检测器训练狗脸检测器 我使用哥伦比亚狗数据集 ftp ftp umiacs umd edu pub kanazawa CU Dogs zip 起初我的召回率为 0 但通过增加 C 值 我设法将训练集上的召
  • 返回分配的字符串导致内存泄漏

    在 Fortran 中返回可变长度字符串的建议解决方案来自this问题 function itoa i result res character allocatable res integer intent in i character r
  • 需要密码才能禁用 Android 设备管理员

    我正在考虑一个具有设备管理员权限的安全应用程序 我想看看当用户尝试在 设置 gt 安全 gt 设备管理员 下以管理员身份取消选中该应用程序时 是否可能需要密码 这将增加一个障碍 不允许用户轻易卸载应用程序 因为他们首先需要从应用程序中删除管
  • Rails 上具有自定义域的多租户

    我正在创建像 Shopify 这样的多租户应用程序 并且想知道如何在指向同一应用程序实例的服务器上创建自定义域 例如 app1 mysystem com www mystore com app2 mystem com www killers
  • 使用变量按名称选择 ActiveX 控件复选框(在 Word 或 Excel 中)?

    这行代码有什么问题吗 WordDoc CheckBoxNum Value CheckBoxVal 需要明确的是 我正在使用 ActiveX 控件 复选框 我将值 真 假 和复选框名称保存在 Excel 文件中 该代码打开我的 Word 文档
  • 元素的最大尺寸

    我正在使用高度为的画布元素600 to 1000像素和宽度为几十或几十万像素 然而 在一定数量的像素 显然未知 之后 画布不再显示我用 JS 绘制的形状 有谁知道有没有限制 在 Chrome 12 和 Firefox 4 中进行了测试 更新
  • 如何将字符串或类传递给方法来创建实例

    我将使用以下方法 它通过向其传递类型来工作 例如obj addComponent MyClass 这很好用 我尝试修改type参数通过添加 string到它 但它现在给我错误说 不能将 new 与类型缺少调用或构造签名的表达式一起使用 无论
  • 您指定的指纹已被此项目或其他项目中的 Android OAuth2 客户端 ID 使用

    我注意到 android studio 中的 gradle 视图签名报告中显示的 SHA1 编号与我最初的不同 我想可能是一年前换电脑造成的 我的游戏应用程序仍然能够访问排行榜和成就 当我看到我的 Google API 仪表板时 我注意到
  • 有什么方法可以在悬停时仅对图像的一部分进行着色吗?

    我喜欢用 HTML CSS 甚至 jQuery 编写简单的图像绘制代码 假设我有一个原始图像 我想让它着色 但仅限于悬停的部分 或光标所在的 10x10px 正方形或圆形图像 我应用了一些滤镜来使用 CSS 使其灰度化 但我不知道如何仅对悬
  • 从其他对象属性(动态)计算的 Javascript 对象属性

    我正在尝试创建一个 javascript 对象来计算其上设置的属性的各种值 我已经编译了这个简单的例子来说明我想要实现的目标 JSFIDDLE var obj obj a 2 obj b 5 obj avg obj a obj b 2 ob