在Javascript集合中,使用较早值中较早的键/值的值

And*_*ew 4 javascript

我知道这听起来很傻,但现在我的好奇心让我坚持这个想法.是否可以声明一组键/值对,如var collection = {a:"1", b:"2"},然后有第三对说c: "3" + b.value?

Gib*_*boK 6

第一种方式,使用属性getter.

请注意c,酒店为bc.

var collection = {
  a: 1,
  b: 2,
  get c() {
    return this.a + this.b;
  }
};

console.log(collection.a); // 1
console.log(collection.b); // 2
console.log(collection.c); // 3
Run Code Online (Sandbox Code Playgroud)

第二种方式,使用ES6中的简洁方法或ES5中更"经典"的函数声明.

请注意c现在是一个功能.

let collection = {
  a: 1,
  b: 2,
  c() {
    return this.a + this.b;
  }
};

console.log(collection.a); // 1
console.log(collection.b); // 2
console.log(collection.c()); // 3 called as a function
Run Code Online (Sandbox Code Playgroud)

第三种方式,使用专用函数进行初始化.

如果您有更复杂的初始化,可能在更多属性上,并且可以像"构造函数"一样工作,这将非常有用.

var collection = {
  a: 1,
  b: 2,
  c: 3,
  init: function() {
    this.c = this.a + this.b;
  }
};
collection.init();
console.log(collection.a); // 1
console.log(collection.b); // 2
console.log(collection.c); // 3
Run Code Online (Sandbox Code Playgroud)

第四种方式,直接在c财产上.

var collection = {
  a: 1,
  b: 2,
  c: undefined
};
collection.c = collection.a + collection.b;
console.log(collection.a); // 1
console.log(collection.b); // 2
console.log(collection.c); // 3
Run Code Online (Sandbox Code Playgroud)

关于具体你的问题,我会getter在前面使用一个并附加值"3" 来解决它b(请注意结果是字符串类型),例如:

var collection = {
  a: 1,
  b: 2,
  get c() {
    return '3' + this.b;
  }
};
console.log(collection.a); //1
console.log(collection.b); //2
console.log(collection.c); //"32"
console.log(typeof collection.c); // string
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的答案,比我的更多.@Andrew你应该接受这个. (2认同)
  • 吸气剂似乎是OP所要求的最佳方法. (2认同)