gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 04:50:13 24 4
gpt4 key购买 nike

我正在尝试创建一个 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'然后在第二次计算'rounded'中使用'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);

关于从其他对象属性计算(动态)的 Javascript 对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29787573/

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