为什么只将第一个值写入变量

时间:2019-05-28 11:24:03

标签: javascript

我想获取对象的属性并根据属性调用函数。我正在尝试这样做:

let page = {};
Object.keys(product.details).forEach((k) => {
  console.log(k)
  switch (k) {
    case 'description':
      page.add(getDescription());
      break;
    case 'comment':
      page.add(getComment());
      break;
    case 'subDescription':
      page.add(getSubDescription());
      break;
  }
});
console.log(page);

我的对象

{
  about: 'text',
  description: 'text',
  comment: 'text',
  subDescription: 'text'
}

我在控制台中会得到什么:

about
description
...\src\views\partials\product\description.hbs

为什么只有第一个函数被调用,其余的为什么不被调用?我怎么了?

2 个答案:

答案 0 :(得分:1)

这只是一个猜测-也许 page.add()根本不存在。

products.about 是对象中的第一个键-因此,在forEach循环中您会得到

console.log(k)->关于->没什么

下一个键是说明 console.log(k)->说明->现在,它尝试执行page.add(getDescription()); 因为它是在switch块中定义的。如果该功能不存在,它将在此处崩溃。

答案 1 :(得分:0)

除非您将

page.add添加到Object.prototype或在对象中声明它,否则未定义它,但这完全没有必要。

使用类似这样的东西,使其更易于处理。为什么要使用函数从具有相同键的对象中获取值?

const page = {}

for (let key in product.details) {
  console.log(key) // returns about, comment, description, ....
  page[key] = product.details[key]
}

console.log(page)

/* console.log(page) returns
{
  about: "text"
  comment: "text"
  description: "text"
  subDescription: "text"
}
*/