使用函数设置JavaScript Object值

时间:2017-08-23 19:55:52

标签: javascript

我试图用函数设置一个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));

谢谢!

2 个答案:

答案 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);