刚开始学习JS,我希望有人能解释如何使用全局函数add2来填充组合的AgesPlus2?
function add2(num1, num2) {
return (num1 + num2) + 2;
};
let people = {
age1: 43,
age2: 23,
combinedAgesPlus2: add2(age1, age2)
}
函数调用很好,只是对象仅在声明后存在,而不是介于两者之间,因此您无法访问对象文字中的age1
。之后可以设置:
let people = {
age1: 43,
age2: 23,
};
people.combinedAgesPlus2 = add2(people.age1, people.age2);
请继续阅读:
对象文本声明中的自引用
您可以使用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);
在对象创建完成之前,无法访问对象文本的属性。如果要在对象创建期间读取和写入属性,则需要使用构造函数而不是对象文本:
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 );
您可以使用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)