【发布时间】:2020-08-05 20:07:38
【问题描述】:
我创建了两个类,代表商店购物车的 jsCart 和代表产品的 jsProduct。
jsCart 应该有一个对象作为属性来存储 jsProduct 实例。
我的问题是如何将 jsProduct 实例添加到 jsCart 的该对象属性中。
这是 jsCart(相关位)
class jsCart {
constructor() {
this.products = {};
this.sum = 0;
}
set _products(product) {
this.products[product.id] = product;
}
remove(id) {
delete this.products[id];
}
updateSum() {
for (var product in this.products) {
this.sum += this.products[product]['sum'];
}
}
}
还有jsProduct(相关位):
class jsProduct {
constructor(id, price, quantity) {
this.id = id;
this.price = price;
this.quantity = quantity;
this.sum = this.price * this.quantity;
}
set _quantity(n) {
this.quantity = n;
this.sum = this.price * this.quantity;
}
}
我尝试将产品添加到购物车:
jsCart._products = new jsProduct('bananas',23,1);
这似乎确实有效,但是当我尝试添加另一个产品时,如果我正确使用 chrome 的控制台,它似乎覆盖了第一个:
也许我应该使用吸气剂来查看 .products 的内容?或者关于 setter 或我是如何使用它的?
谢谢
【问题讨论】:
-
所以,只是为了让它不碍事。 Javascript 没有
associative arrays。这不是你在这里使用的。您正在使用带有键值对的简单对象。 -
不要(ab)使用
_productssetter 作为方法。如果你有remove(id),你也应该有add(id)(或add(product)) -
谢谢@Taplar 我更正了。
标签: javascript oop ecmascript-6 es6-class