我试图用函数设置一个Object值。
实质上,我试图计算一个对象中的总值,直到某一点,即传递给limit
函数的calculateTotal
变量。
似乎我做错了,有什么建议吗?
var sc = 0.75
com = 2197.63,
user_input = 400,
f11_total = 0;
var v = {
"a": com,
"b": (com * 0.06 * sc),
"c": (com * 0.09 * sc),
"d": (215.54 * Math.pow(sc, 2)),
"e": (299.36 * sc),
"f": 328.76,
"g": ((com * 0.048) * (user_input / 400)),
"h": (com * 0.01),
"3.6": 0.036,
"total": function() {
calculateTotal(3.6);
}
};
function calculateTotal(limit) {
for (var k in v) {
if (k == limit) return (f11_total * v[k]);
f11_total += v[k];
}
}
console.log(calculateTotal(3.6));
谢谢!
答案 0 :(得分:3)
total
成员的值被设置为您定义的函数,而不是它的返回值。
正如@Santi指出的那样,我们无法在v
内引用calculateTotal
,直到v
宣告完毕为止。
此处的方法可能是在total
声明为v
之后填充var v = {
"a": com,
"b": (com * 0.06 * sc),
"c": (com * 0.09 * sc),
"d": (215.54 * Math.pow(sc, 2)),
"e": (299.36 * sc),
"f": 328.76,
"g": ((com * 0.048) * (user_input / 400)),
"h": (com * 0.01),
"3.6": 0.036
};
v.total = calculateTotal(3.6);
:
Promise.promisify(require(someAPI))
答案 1 :(得分:1)
主要问题是您返回函数而不是实际值。
Jonathan's answer简明扼要,但我想我会使用get
为您提供现代替代方案。
它不需要对象的操作/初始化,完全是自包含的,并且如果/当对象被修改时将重新计算。
var sc = 0.75
com = 2197.63,
user_input = 400;
var v = {
"a": com,
"b": (com * 0.06 * sc),
"c": (com * 0.09 * sc),
"d": (215.54 * Math.pow(sc, 2)),
"e": (299.36 * sc),
"f": 328.76,
"g": ((com * 0.048) * (user_input / 400)),
"h": (com * 0.01),
"3.6": 0.036,
get total() {
var f11_total = 0;
for (var k in this) {
if (k == 3.6) return (f11_total * this[k]);
f11_total += this[k];
}
}
}
console.log("v.total = " + v.total);
v.f = 100;
console.log("f changed to 100");
console.log("v.total = " + v.total);