Как мне получить значение для этих двух свойств?
Функция равна значению этих свойств. Если вы хотите получить возвращаемое значение функции, вы должны вызвать it.
Обратите внимание, что typeof
проверка, которую вы делаете в вашем for-in
l oop не нужно Переменная eachEle
является свойством name , а не значением свойства. В for-in
l oop имя всегда будет строкой. (Не все свойства именуются со строками, но for-in
охватывает только те, которые являются.)
Вы хотите получить значение свойства, проверить, является ли оно функцией, и, если это так, вызвать ее:
for (let name in employee){
let value = employee[name];
if (typeof value === "function") {
value = employee[name]();
}
console.log(name + ":" + value);
}
Live Пример:
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);
}
Вы сказали, что только что захотели изменить l oop, но другой подход заключается в изменении определения объекта для использования свойства аксессора вместо явной функции:
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);
}
};
Тогда l oop не нужно проверять:
for (let name in employee){
console.log(name + ":" + employee[name]);
}
Live Пример:
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]);
}
Это работает, потому что когда вы получаете значение свойства доступа, его функция доступа запускается за сценой, а возвращаемое значение этой функции предоставляется в качестве значения свойства.