我有一个看起来像这样的课程:
class Item {
constructor (color, size) {
this._color = color
this._size = size
}
get color() {
return this._color
}
我实例化一个基本项目:
const pencil = new Item('yellow', 6)
然后我实例化几个子项:
pencil.eraser = new Item('red', 2)
pencil.lead = new Item('grey', 1)
我想以某种方式遍历每个子项目。
var colors = [];
pencil.forEach(part => {
colors.push(part.color)
}
console.log(colors) //expected output: red, grey
这样的事情会很好,但我知道这是不可能的。
答案 0 :(得分:2)
您可以将对象属性的所有值.filter()
缩小为instanceof Item
,然后将.map()
变为其颜色。
class Item {
constructor (color, size) {
this._color = color
this._size = size
}
get color() {
return this._color
}
}
const pencil = new Item('yellow', 6)
pencil.eraser = new Item('red', 2)
pencil.lead = new Item('grey', 1)
var colors = Object.values(pencil)
.filter(v => v instanceof Item)
.map(p => p.color);
console.log(colors)

答案 1 :(得分:0)
for ... in循环允许您遍历对象属性。然后,您可以检查它们是否是Item类的实例。
class Item {
constructor (color, size) {
this._color = color
this._size = size
}
get color() {
return this._color
}
}
const pencil = new Item('yellow', 6)
pencil.eraser = new Item('red', 2)
pencil.lead = new Item('grey', 1)
var colors = [];
for (let item in pencil) {
if (pencil[item] instanceof Item) {
colors.push(pencil[item].color);
}
}
console.log(colors) //expected output: red, grey