有人可以解释我应该如何正确调用此函数吗?

时间:2018-08-21 17:11:25

标签: javascript

刚开始学习JS时,我希望有人能解释如何使用全局函数add2来填写合并的AgesPlus2?

function add2(num1, num2) {
  return (num1 + num2) + 2;
};

let people = {
  age1: 43,
  age2: 23,
  combinedAgesPlus2: add2(age1, age2)
}

4 个答案:

答案 0 :(得分:3)

该函数调用很好,只是该对象仅在声明后之后存在并且不在它们之间,因此您无法访问对象文字内部的general_paired_simpleLM。您可以在之后进行设置:

age1

在这里阅读

Self-references in object literal declarations

答案 1 :(得分:1)

您可以使用getter

function add2(num1, num2) {
  return (num1 + num2) + 2;
};

let people = {
  age1: 43,
  age2: 23,
  get combinedAgesPlus2() {
    return add2(this.age1, this.age2);
  }
}

console.log(people.combinedAgesPlus2);

正如paulpro在下面的评论中提到的那样,这将在您每次访问属性时(而不是在实例化时)计算值。

这样做的好处是,尽管更新了它所引用的属性,但您的价值始终是最新的:

function add2(num1, num2) {
  return (num1 + num2) + 2;
};

let people = {
  age1: 43,
  age2: 23,
  get combinedAgesPlus2() {
    return add2(this.age1, this.age2);
  }
}

//DEMO
console.log("combinedAgesPlus2: ", people.combinedAgesPlus2);

people.age1 = 10;
console.log("age1 changed to 10");

console.log("combinedAgesPlus2: ", people.combinedAgesPlus2);

答案 2 :(得分:0)

在对象创建完成之前,您无法访问对象文字的属性。如果要在对象创建期间读取和写入属性,则需要使用构造函数而不是对象文字:

function add2( num1, num2 ) {
  return num1 + num2 + 2;
}
 
let people = new function ( ) {
  this.age1 = 43;
  this.age2 = 23;
  this.combinedAgesPlus2 = add2( this.age1, this.age2 );
};

console.log( people );

答案 3 :(得分:0)

您可以使用getters

function add2(num1, num2) {
  return (num1 + num2) + 2;
};

let people = {
  age1: 43,
  age2: 23,
  get combinedAgesPlus2() { return add2(this.age1, this.age2) } 
}

console.log(people.combinedAgesPlus2)