【发布时间】:2021-02-05 13:22:29
【问题描述】:
大家好,我开始阅读有关 Javascript ES6 类的内容,所以正在尝试一些东西
这是渲染每个产品的 ProductItem 类
class ProductItem {
constructor(product) {
this.product = product;
}
addToCart() {
console.log("adding product to cart", this.product);
ShoppingCart.addProduct(this.product);
}
render() {
const prodEl = document.createElement("li");
prodEl.className = "product-item";
prodEl.innerHTML = `
<div>
<img src="${this.product.imageUrl}" alt="${this.product.title}" >
<div class="product-item__content">
<h2>${this.product.title}</h2>
<h3>\$${this.product.price}</h3>
<p>${this.product.description}</p>
<button>Add to Cart</button>
</div>
</div>
`;
const addCardButton = prodEl.querySelector("button");
addCardButton.addEventListener("click", this.addToCart.bind(this));
return prodEl;
}
}
在另一个类中,我们循环并实例化这个类
for (const prod of this.products) {
const productItem = new ProductItem(prod);
const prodEl = productItem.render();
prodList.append(prodEl);
}
所以现在的问题是我创建了另一个名为“ShoppingCart”的类,以便在我点击按钮时将产品添加到购物车中
class ShoppingCart {
constructor(items){
console.log(this)
this.items=items
}
static addProduct(product) {
console.log(this);
this.items.push(product);
this.totalOutput = `<h2>Total Amount: ${1}</h2>`;
}
}
当我阅读静态方法时,可以在没有实例化类的情况下调用 所以我所做的是当我单击“ProductItem”类中的按钮时 我调用了一个 fn() 然后你可以在那个函数中看到我所做的是
addToCart() {
console.log("adding product to cart", this.product);
ShoppingCart.addProduct(this.product);
}
但这给了我一个错误
未捕获的类型错误:无法读取未定义的属性“推送”
当我在 addProduct 中控制台“this”时,我看到一些奇怪的输出
> class ShoppingCart { constructor(items){
> console.log(this)
> this.items=items } static addProduct(product) {
> console.log(this);
> this.items.push(product);
> this.totalOutput = `<h2>Tot…........
【问题讨论】:
-
一个产品项必须完全不知道它将被添加到哪里。因此原型
addToCart方法没有用,甚至会产生误导。人们需要找到另一种建模方法。我开始考虑... -
是的,这种方法不好,因为我正在学习一个教程,而他只是在上这么多课来解释更多的概念……你能告诉我什么是最好的方法吗??
-
还有什么问题吗?
-
@PeterSeliger no mate 非常感谢您的详细解释
标签: javascript events binding es6-class decoupling