使用 Javascript,我编写了这段代码来创建一个对象:
let employee = {
emp_firstname: "Prasanta",
emp_lastname: "Banerjee",
emp_fullname: function(){
return (this.emp_firstname + " " + this.emp_lastname);
},
emp_id: 673630,
emp_horizontal:"QEA",
emp_vertical: "Insurance",
joining_date: "22/12/2017",
emp_salary : 13579,
emp_bonus : function(){
return (this.emp_salary*1);
}
};
现在,我有兴趣打印每个属性及其值,所以我写了这段代码:
for (let eachEle in employee){
if(typeof eachEle=='string' || typeof eachEle=='number'){
console.log(eachEle + ":" + employee[eachEle]);
}
else if(typeof eachEle=='function'){
console.log(eachEle + ":" + employee.eachEle());
}
}
但是,在执行时,除了“emp_fullname”和“emp_bonus”之外它工作正常。它没有显示值,而是显示了函数:
let employee = {
emp_firstname: "Prasanta",
emp_lastname: "Banerjee",
emp_fullname: function() {
return (this.emp_firstname + " " + this.emp_lastname);
},
emp_id: 673630,
emp_horizontal: "QEA",
emp_vertical: "Insurance",
joining_date: "22/12/2017",
emp_salary: 13579,
emp_bonus: function() {
return (this.emp_salary * 1);
}
};
for (let eachEle in employee) {
if (typeof eachEle == 'string' || typeof eachEle == 'number') {
console.log(eachEle + ":" + employee[eachEle]);
} else if (typeof eachEle == 'function') {
console.log(eachEle + ":" + employee.eachEle());
}
}
我应该如何检索这两个属性的值?我正在寻找可以修改 for...in
循环并检索值的答案。
最佳答案
How am i supposed to retrieve the value for those two properties?
函数是那些属性的值。如果你想得到函数的返回值,你必须调用它。
请注意,您在 for-in
循环中进行的 typeof
检查是不必要的。 eachEle
变量是属性 name,而不是属性值。在 for-in
循环中,名称总是一个字符串。 (并非所有属性都以字符串命名,但 for-in
仅涵盖那些是字符串的。)
您想获取属性的值,检查它是否是一个函数,如果是则调用它:
for (let name in employee){
let value = employee[name];
if (typeof value === "function") {
value = employee[name]();
}
console.log(name + ":" + value);
}
实例:
let employee = {
emp_firstname: "Prasanta",
emp_lastname: "Banerjee",
emp_fullname: function(){
return (this.emp_firstname + " " + this.emp_lastname);
},
emp_id: 673630,
emp_horizontal:"QEA",
emp_vertical: "Insurance",
joining_date: "22/12/2017",
emp_salary : 13579,
emp_bonus : function(){
return (this.emp_salary*1);
}
};
for (let name in employee){
let value = employee[name];
if (typeof value === "function") {
value = employee[name]();
}
console.log(name + ":" + value);
}
您说您只是想更改循环,但另一种方法是更改对象定义以使用访问器属性 而不是显式函数:
let employee = {
emp_firstname: "Prasanta",
emp_lastname: "Banerjee",
get emp_fullname() {
// ^^^ ^^
return (this.emp_firstname + " " + this.emp_lastname);
},
emp_id: 673630,
emp_horizontal:"QEA",
emp_vertical: "Insurance",
joining_date: "22/12/2017",
emp_salary : 13579,
get emp_bonus() {
// ^^^ ^^
return (this.emp_salary*1);
}
};
那么循环就不必检查了:
for (let name in employee){
console.log(name + ":" + employee[name]);
}
实例:
let employee = {
emp_firstname: "Prasanta",
emp_lastname: "Banerjee",
get emp_fullname() {
// ^^^ ^^
return (this.emp_firstname + " " + this.emp_lastname);
},
emp_id: 673630,
emp_horizontal:"QEA",
emp_vertical: "Insurance",
joining_date: "22/12/2017",
emp_salary : 13579,
get emp_bonus() {
// ^^^ ^^
return (this.emp_salary*1);
}
};
for (let name in employee){
console.log(name + ":" + employee[name]);
}
这是可行的,因为当您获取访问器属性的值时,它的访问器函数会在后台运行,并且该函数的返回值作为属性值提供。
关于Javascript:无法检索具有功能的对象中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59918607/