Javascript:无法检索具有功能的对象中的值

标签 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",
    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/

相关文章:

javascript - JavaScript 中对象和普通对象的区别?

javascript - 为什么 AngularJS Controller 中的另一个变量会发生变化?

javascript - 如何不通过引用将 JavaScript 对象复制到新变量?

download - 如何将模型下载为 JSON 文件?

javascript - Node.js 如何删除\编辑服务器上 json 文件中的数据

javascript - 重构 jQuery/JavaScript 代码以显示/隐藏大量模态窗口

javascript - 从 Rails Controller 将字符串数组传递给 javascript 时格式错误

javascript - 使用方法和属性定义 javascript 对象的最佳方法是什么? (如果可以以原生方式实现)

javascript - jQuery:生成尚未使用的独特随机颜色

javascript - 如何显示自动展开的下拉列表,以便在页面加载时显示所有选项