【问题标题】:Use of constructor and class JavaScript使用构造函数和类 JavaScript
【发布时间】:2018-11-16 15:39:52
【问题描述】:

我正在使用以下说明编写代码:

创建一个名为 ShoppingCart 的类。

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

创建需要 item_name、数量和价格参数的方法 add_item。此方法应将已添加项目的成本添加到总计的当前值中。它还应该在 items dict 中添加一个条目,以便 key 是 item_name 并且 value 是 item 的数量。

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

创建一个方法 checkout 接受 cash_paid 并从付款中返回余额值。如果 cash_paid 不足以支付总额,则返回 Cashpaid not enough。

创建一个名为 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 新手。提前致谢。

【问题讨论】:

  • 为什么要创建一个函数ShoppingCart?是不是需要创建一个类,就像您为 Shop 所做的那样?
  • @baao 我创建了一个构造函数。构造函数本身应该是一个类吗?
  • 您能更具体地谈谈您的问题吗? 没有做到这一点对我没有多大帮助......
  • 当你说“我的代码没有起到作用”时,你能更具体一点吗?它现在在做什么,你期望它做什么?如果有的话,也分享错误消息
  • 你要求的第一句话是创建一个名为ShoppinCart的类

标签: javascript node.js reactjs oop


【解决方案1】:

您也应该将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)

【讨论】:

  • 确实如此,运行我的示例时查看控制台输出
  • 请帮忙检查结帐功能。
  • 我知道。请问你能写出你自己的口味,满足所有给定的条件吗?请。
  • 没有。这是你的任务,我帮你解决了这个问题,不会帮你作弊的 ;-)
猜你喜欢
  • 2017-01-21
  • 2019-01-17
  • 2014-10-29
  • 2021-08-14
  • 2014-03-08
  • 2017-06-12
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多