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

我使用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_全名”和“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()一样调用,并带有()