Javascript:无法检索具有函数的对象中的值
我使用Javascript编写了以下代码来创建一个对象:Javascript:无法检索具有函数的对象中的值,javascript,javascript-objects,Javascript,Javascript Objects,我使用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
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_全名”和“emp_奖金”之外,它工作正常。它显示的不是值,而是函数:
let employee={
emp_名字:“普拉桑塔”,
emp_姓:“班纳吉”,
emp_全名:函数(){
返回(this.emp_lastname+“”+this.emp_lastname);
},
emp_id:673630,
emp_横向:“QEA”,
emp_垂直:“保险”,
加入日期:2017年12月22日,
emp_工资:13579,
emp_奖金:功能(){
报税表(本表为emp_工资*1);
}
};
对于(让每个员工都参与进来){
如果(每个元素的类型=='string'| |每个元素的类型=='number'){
console.log(eachEle+“:“+employee[eachEle]);
}else if(每个元素的类型=='function'){
log(eachEle+:“+employee.eachEle());
}
}
我应该如何检索这两个属性的值
函数是这些属性的值。如果你想得到函数的返回值,你必须调用它
请注意,您在for in
循环中执行的类型检查是不必要的。eachEle
变量是属性名称,而不是属性值。在for In
循环中,名称将始终是字符串。(并非所有属性都使用字符串命名,但中的for
仅包括那些已命名的属性。)
要获取属性的值,请检查它是否是函数,如果是,请调用它:
for (let name in employee){
let value = employee[name];
if (typeof value === "function") {
value = employee[name]();
}
console.log(name + ":" + value);
}
实例:
let employee={
emp_名字:“普拉桑塔”,
emp_姓:“班纳吉”,
emp_全名:函数(){
返回(this.emp_lastname+“”+this.emp_lastname);
},
emp_id:673630,
emp_横向:“QEA”,
emp_垂直:“保险”,
加入日期:2017年12月22日,
emp_工资:13579,
emp_奖金:功能(){
报税表(本表为emp_工资*1);
}
};
for(输入员工姓名){
让值=员工[姓名];
如果(值的类型==“函数”){
value=员工[姓名]();
}
console.log(名称+”:“+值);
}
在for
循环中,迭代对象中的键,这些键永远不会是对象。相反,您应该在检查其类型之前检索该项
for(let key in employee){
let value = employee[key];
if(typeof value=='string' || typeof vlaue=='number'){
console.log(key + ":" + value);
}
else if(typeof value=='function'){
console.log(key + ":" + value());
}
}
您需要检查值的类型,eachEle
是键的值,对于您的对象,它始终是字符串
let employee={
emp_名字:“普拉桑塔”,
emp_姓:“班纳吉”,
emp_全名:函数(){
返回(this.emp_lastname+“”+this.emp_lastname);
},
emp_id:673630,
emp_横向:“QEA”,
emp_垂直:“保险”,
加入日期:2017年12月22日,
emp_工资:13579,
emp_奖金:功能(){
报税表(本表为emp_工资*1);
}
};
对于(让每个员工都参与进来){
如果(雇员[每个雇员]的类型=='string'| |雇员[每个雇员]的类型=='number'){
console.log(eachEle+“:“+employee[eachEle]);
}else if(员工[每个员工]的类型=='职能'){
log(eachEle+“:“+employee[eachEle]());
}
}
您需要更改两件事
您需要检查字符串、数字和函数的元素值,而不是键
在执行函数时,需要使用括号表示法,因为它是一个动态键
let employee={
emp_名字:“普拉桑塔”,
emp_姓:“班纳吉”,
emp_全名:函数(){
返回(this.emp_lastname+“”+this.emp_lastname);
},
emp_id:673630,
emp_横向:“QEA”,
emp_垂直:“保险”,
加入日期:2017年12月22日,
emp_工资:13579,
emp_奖金:功能(){
报税表(本表为emp_工资*1);
}
};
用于(让输入员工){
让eachEle=employee[key];
if(每个元素的类型=='string'| |每个元素的类型=='number'){
console.log(key+”:“+employee[key]);
}
else if(每个元素的类型=='function'){
console.log(key+”:“+employee[key]());
}
}
您的错误是:
1.你写了:typeofeachele
而不是:typeofemployee[eachEle]
:
2.执行是:employee.eachEle()
而不是employee[eachEle]()
<代码>每一个都是一个字符串
let employee={
emp_名字:“普拉桑塔”,
emp_姓:“班纳吉”,
emp_全名:函数(){
返回(this.emp_lastname+“”+this.emp_lastname);
},
emp_id:673630,
emp_横向:“QEA”,
emp_垂直:“保险”,
加入日期:2017年12月22日,
emp_工资:13579,
emp_奖金:功能(){
报税表(本表为emp_工资*1);
}
};
对于(让每个人都在雇员中){debugger
如果(雇员[每个雇员]的类型=='string'| |雇员[每个雇员]的类型=='number'){
console.log(eachEle+“:“+employee[eachEle]);
}
else if(员工[每个员工]的类型=='function'){
log(eachEle+“:“+employee[eachEle]());
}
}
问题是emp_fullname是一种函数类型,需要像emp_fullname()一样调用,并带有()