使用构造函数和类JavaScript

时间:2018-06-06 20:31:34

标签: javascript node.js reactjs oop

我按照以下说明处理代码:

创建一个名为ShoppingCart的类。

创建一个没有参数的构造函数,并将total属性设置为零,并初始化一个名为items的空dict属性。

创建一个需要item_name,quantity和price参数的方法add_item。此方法应将添加项的成本添加到当前总计的值。它还应该在项目dict中添加一个条目,使得键是item_name,值是项目的数量。

创建一个方法remove_item,它需要与add_item类似的参数。它应该删除已添加到购物车中但不是必需的项目。此方法应从当前总计中扣除这些项目的成本,并相应地更新项目dict。如果要删除的商品数量超过购物车中的当前数量,则假定要删除该商品的所有商品。

创建一个方法结帐,其中包含cash_paid并从付款中返回余额值。如果cash_paid不足以支付总额,则返还现金支付不足。

创建一个名为Shop的类,该类具有一个构造函数,该构造函数初始化一个名为quantity的属性为100。

确保Shop继承自ShoppingCart。

在Shop类中,覆盖remove_item方法,这样调用Shop的remove_item,不带参数会减少数量。

的JavaScript 使用驼峰大小写为您的类方法名称,例如

add_item 

变为

addItem 

唯一的问题是,我的代码,如下所示,没有做到这一点:

function ShoppingCart(){
  this.total = 0;
  this.items = {};
  this.addItem = function(itemName, quantity, price){
    this.total = this.total + price;
    this.items[itemName] = quantity;
    //console.log(this.items);
  }
  this.removeItem = function(itemName, quantity, price){
    delete this.items['Mango'];
    // this.total = this.total - price;
    if (quantity > Object.keys(this.items).length){
      this.items = {};
    }
    //console.log(price);
    //console.log(this.total);
  }
  this.checkout = function(cashPaid){
    if (cashPaid >= this.total){
      return cashPaid - this.total;
    }
    return 'Cash paid not enough';
  }
}

class Shop extends ShoppingCart {
  constructor(quantity){
    super(quantity);
    this.quantity = 100;
  }
  removeItem(){
    this.quantity--;
  }
}

请帮助您编写符合所有条件的代码吗?

我非常确定我的代码是一团糟,因为我在JS中对OOP不熟悉。提前谢谢。

1 个答案:

答案 0 :(得分:2)

你应该将ShoppingCart转换成一个类,之后它可以工作:

class ShoppingCart {
  constructor() {
    this.total = 0;
    this.items = {};
  }
  addItem(itemName, quantity, price){
    this.total = this.total + price;
    this.items[itemName] = quantity;
    //console.log(this.items);
  }
  removeItem(itemName, quantity, price){
    delete this.items['Mango'];
    // this.total = this.total - price;
    if (quantity > Object.keys(this.items).length){
      this.items = {};
    }
    //console.log(price);
    //console.log(this.total);
  }
  checkout(cashPaid){
    if (cashPaid >= this.total){
      return cashPaid - this.total;
    }
    return 'Cash paid not enough';
  }
}

class Shop extends ShoppingCart {
  constructor(quantity){
    super(quantity);
    this.quantity = 100;
  }
  removeItem(){
    this.quantity--;
  }
}

console.log(new Shop().removeItem)