【问题标题】:JSON Definitions Using Internally Defined Variables [duplicate]使用内部定义变量的 JSON 定义 [重复]
【发布时间】:2018-07-23 06:42:43
【问题描述】:

我正在尝试创建一个 JSON 对象来存储程序的一些参数。一些参数在定义时需要从其他参数中计算出来。我想在对象定义中这样做,但也许这是不可能的

var params = {
        a: 50,
        b: 70,
        c: this.a+this.b
    } 
结果

会发生什么

>params.c
NaN

我希望发生的事

>params.c
120

编辑

在进一步阅读之后,我想我正在使用 Object Literal Notation 而不是 JSON。

【问题讨论】:

标签: javascript json object definition


【解决方案1】:

您可以使用这种方法:

为避免重新计算,请使用函数Object.assign

get 语法将对象属性绑定到查找该属性时将调用的函数。

var params = {
  a: 50,
  b: 70,
  get c() {
    console.log('Called!');
    return this.a + this.b;
  }
};

console.log(params.c); // Prints 120 then Called!
console.log(params.c); // Prints 120 then Called!

var params = Object.assign({}, {
  a: 50,
  b: 70,
  get c() {
    console.log('Called from function Object.assign!');
    return this.a + this.b;
  }
});

params.a = 1000; // To illustrate.

console.log(params.c); // Prints 120
console.log(params.c); // Prints 120
.as-console-wrapper {
  max-height: 100% !important
}

资源

【讨论】:

  • 这没关系,但我想避免每次调用每个参数时都计算它。
  • @Cole ab 的属性会及时改变吗?
  • @Cole 查看更新后的答案。
  • 不,这是为了初始化目的。很高兴知道您可以根据需要使其动态化!
【解决方案2】:

就我个人而言,我会创建常量(因为幻数是魔鬼),但这是一个过于简单化的例子:

const FIFTY = 50;
const SEVENTY = 70;
var params = {
  a: FIFTY,
  b: SEVENTY,
  c: FIFTY + SEVENTY
};

【讨论】:

    【解决方案3】:

    我建议从不包含c 的对象开始,然后在对象之外进行计算。计算完成后,只需将总和作为新的键/值对添加回对象:

    var params = {
      a: 50,
      b: 70,
    }
    
    var sum = 0;
    
    for (var el in params) {
      if (params.hasOwnProperty(el)) {
        sum += params[el];
      }
    }
    
    params['c'] = sum;
    console.log(params);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-16
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-12
      • 2014-10-09
      • 1970-01-01
      相关资源
      最近更新 更多