javascript - 添加几个类实例到 'container'类属性对象

标签 javascript oop ecmascript-6 es6-class

我创建了两个类,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 的控制台,它似乎会覆盖第一个产品:

enter image description here

我是否应该使用 getter 来查看 .products 的内容?或有关 setter 的信息或我如何使用它?

谢谢

最佳答案

首先,您不应该为类实例指定与类本身相同的名称。此外,Javascript 类名的约定是用 Pascal 大小写书写。

所以,就你的情况而言,它是:

class JSCart{
   ....
}

创建 JSCart 实例:

let jsCart = new JSCart();

此外,我会考虑以您不好的方式使用 setter ,因为 setter 不会设置产品的值,但它将产品添加到您的产品中。更好的方法是创建一个添加新产品的方法。

从技术上讲,您的解决方案应该可行。唯一不起作用的是使用不存在的 getter 检索当前产品(在您的情况下是 jsCart._products )。相反,您可以简单地将产品作为购物车的属性进行访问。

Example for creating two products and retrieving the cart's products

此外,请重新考虑是否需要将产品存储在对象中。在我看来,数组更适合你的情况。 当按照您的方式使用对象时,您无法添加两个具有相同名称的产品(例如“apple”和“apple”),因为第二个产品会覆盖第一个产品。 使用对象的优点是可以通过名称直接访问产品。如果您不需要这个并且只需要存储已添加到用户购物车的产品,那么最好使用数组。

关于javascript - 添加几个类实例到 'container'类属性对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61371304/

相关文章:

javascript 不行,是不是获取不到参数?

oop - 将返回类型定义为方法的压缩数

reactjs - Mocha 无法识别 JSX

javascript - react-native:组件不在 .map 中呈现

javascript - 为什么 Bootstrap 4 在 es6 类中使用私有(private)方法?

javascript - CKEditor 5 粘贴为纯文本

javascript - javascript中的var需要多少内存以及何时分配?

javascript - 使用 AJAX/jQuery 动态创建时多次提交表单

c# - 将一种形式的控件用于另一种形式

swift - 在 UserDefaults 中保存对象数组