我到处都有不确定的值,这很烦人。我相信这可能是我用const设置输入的方法
const prod = new Product();
prod
还是其他吗?我相信已经尝试修复某些功能,例如将其退还给购买产品并用null修复我的toLowerCase。
var products = [];
class Product {
constructor(productName, amount, cost) {
this.productName = productName,
this.amount = amount,
this.cost = cost
}
buyProduct(product){
products.push(product);
return this;
}
deleteProduct(str){
var found = products.find(function(element){
})
if(found)
{
if(found.amount>1)
}
}
}
答案 0 :(得分:1)
您不会从所有方法中返回this
,因此无法链接所有这些方法。
sumPrice()
仅在找到该项目时返回此值deleteProduct()
不返回此sumTotal()
都不是此外,您的代码也被严重破坏。这是我为使其工作而进行的修复的列表:
amount
和quantity
使用相同的属性名称item
和productName
使用相同的属性名称amount
和cost
中使用数字而不是字符串let/const
代替var
我也将Product
类的名称更改为ProductsStore
,因为您的类不仅管理一个产品,而且还管理所有产品,所以我将products[]
数组移到该类中并对其进行了初始化在构造函数中。
class ProductsStore {
constructor() {
this.products = [];
}
buyProduct(product) {
this.products.push(product);
return this;
}
deleteProduct(str) {
const found = this.products.find(el =>
el.productName.toLowerCase() == str.toLowerCase())
if (found) {
if (found.amount > 1) {
const foundIndex = this.products.findIndex(x => x.productName.toLowerCase() === str.toLowerCase());
this.products[foundIndex].amount = found.amount - 1;
} else {
this.products.splice(this.products.findIndex(
item => item.productName.toLowerCase() === str.toLowerCase()), 1)
}
}
return this;
}
sumPrice(str, num) {
const foundIndex = this.products.findIndex(x => (x.productName || '').toLowerCase() === str.toLowerCase());
if (foundIndex >= 0) {
this.products[foundIndex].cost = this.products[foundIndex].cost + num;
}
return this;
}
sumTotal() {
this.total = 0;
for (let obj of this.products) {
this.total += obj.amount * obj.cost;
}
return this;
}
write() {
let total = 0;
for (let obj of this.products) {
console.log('Item: ' + obj.productName + ' | Quantity:' + obj.amount + ' | Price:' + obj.cost);
total += obj.amount * obj.cost;
}
console.log('$' + total);
}
}
new ProductsStore()
.buyProduct({ productName: 'jameson', amount: 1, cost: 0 })
.buyProduct({ productName: 'bud light', amount: 3, cost: 0 })
.buyProduct({ productName: 'corona', amount: 4, cost: 0 })
.buyProduct({ productName: 'beer', amount: 1, cost: 0 })
.sumPrice('tequila', 5.99)
.deleteProduct('corona')
.sumPrice('beer', 5.04)
.sumTotal()
.write();
答案 1 :(得分:0)
您应该从所有方法中返回“ this”。
某些方法未返回“ this”,例如:
sumPrice():
if(foundIndex>=0)
{
products[foundIndex].cost = products[foundIndex].cost + num;
}
return this;// this should be returned here.
deleteProduct():
应在函数末尾返回“ this”。
sumTotal():
您应该返回此总计而不是返回总计。
最后,您应该返回总计的吸气剂。