【问题标题】:Shopping cart using OO javascript [closed]使用 OO javascript 的购物车 [关闭]
【发布时间】:2019-03-01 07:00:23
【问题描述】:

我正在尝试使用 javascript 和原型创建一个简单的购物车。

只是一个简单的控制台应用程序。

我想调用myBasket.prototype.addItemsinventory[] 中添加项目,同样我想调用myBasket.prototype.addQuantitymyBasket.prototype.totalAmount 分别增加项目的数量和总金额。

我被困的地方是我如何打电话给myBasket.prototype.addItems 来做必要的事情?这就是我卡住的地方。

var inventory =
[
    { name: "apples", price: 19.95, quantity: 50 },
    { name: "oranges", price: 20.99, quantity: 40 },
    { name: "pineapples", price: 40.00, quantity: 60 },
    { name: "lemons", price: 10.12, quantity: 100 }
]

function myBasket(name, price, quantity){
   this.name = name;
   this.price = price,
   this.quantity = quantity;
   items.push(this);
}

myBasket.prototype.addItems = function(){
    console.log('items added to cart')
}

myBasket.prototype.addQuantity = function(){
    console.log('item quantity added to cart')
}

myBasket.prototype.totalAmount = function(){
    console.log('Total amount is');
    var total = this.price * this.quantity;
}

// newItem.prototype = Object.create(myBasket.prototype);

var newItem = [];
newItem = new myBasket({name:'milk', price:80,quantity: 2});
newItem.push(this.items);
console.log('new item(s) added', items);

var checkoutAmount = new myBasket();
console.log('checkout amount');

【问题讨论】:

  • 您的问题到底是什么?因为“这是正确的”是相当模棱两可的。我当然不会采用这种方法,但主要是因为在现实世界的应用程序中事情要复杂得多。然而,就我们的目的而言——“一个简单的控制台应用程序”似乎很合适。但是你到底有什么问题呢?
  • 我很抱歉。让我编辑我的查询。
  • @VLAZ 我已经更新了描述。

标签: javascript prototype


【解决方案1】:

不,既然您是 OOP 的新手,请这样想。每一件事物都是一个对象。 所以在你的情况下,你应该有class Itemclass Basket 你还应该有办法从你的购物篮中添加和删除物品。

查看下面的代码 sn-p

class Item{
  constructor(name,price,quantity) {
    this.name = name;
    this.price = price;
    this.quantity = quantity;
  }
}

class Basket {
  constructor() {
    this.items = []
  }
  
  addItem(item){
    this.items.push(item)
  }
}

let items = [
  new Item("apples",40,20),
  new Item("lemons",32,38),
  new Item("mangos",44,67),
  new Item("pineapples",32,88)
]

let basket = new Basket()

let market = document.getElementById("market")
let s = items.map((item,id)=>"<button onClick=addItem("+id+")>Add "+item.name+"</button>").join("")
market.innerHTML = s

function addItem(id) {
  basket.addItem(items[id])
  showBasket()
}

function showBasket() {
  let cart = document.getElementById("items")
  let s = basket.items.map((item,id)=>"<span style='margin: 5px'>"+item.name+"</span>").join("")
  cart.innerHTML = s
}
<fieldset>
  <legend>Basket</legend>
<div id="items"></div>
</fieldset>
<div id="market"></div>

希望能回答你的问题

由于问题被编辑并添加为使用原型,我将再次使用函数原型进行详细说明

function Item(name,price,quantity) {
  this.name = name;
  this.price = price;
  this.quantity = quantity;
}

function Basket() {
  this.items = []
}

Basket.prototype.addItem = function(item) {
  this.items.push(item);
}

    let items = [
      new Item("apples",40,20),
      new Item("lemons",32,38),
      new Item("mangos",44,67),
      new Item("pineapples",32,88)
    ]

    let basket = new Basket()

    let market = document.getElementById("market")
    let s = items.map((item,id)=>"<button onClick=addItem("+id+")>Add "+item.name+"</button>").join("")
    market.innerHTML = s

    function addItem(id) {
      basket.addItem(items[id])
      showBasket()
    }

    function showBasket() {
      let cart = document.getElementById("items")
      let s = basket.items.map((item,id)=>"<span style='margin: 5px'>"+item.name+"</span>").join("")
      cart.innerHTML = s
    }
<fieldset>
<legend>Basket</legend>
<div id=items></div>
</fieldset>
<div id=market></div>

【讨论】:

  • 嘿,我刚刚看到你的例子被复制到有人给我学习 Javascript 的一些影印本中:D ...如果你也可以写,你可以在 PM 中做您更喜欢),将项目添加到篮子的方法,计算该篮子的总价格,并从“ìtems”数组中减去该金额?这对我有很大帮助。
【解决方案2】:

要将项目添加到数组中,请使用push()

function myBasket(name, price, quantity){
    this.name = name;
    this.price = price,
    this.quantity = quantity;
    items.push(this);
}

【讨论】:

  • items 不是this 的属性似乎很奇怪...
  • 我的回答很奇怪,还是 OP 的代码布局很奇怪@deceze?
  • 要么。如果您要提出一个解决方案,它应该是一个作为 OO 代码有意义的解决方案,而不仅仅是在 OP 尝试不足的情况下。
  • 好的对不起@deceze。
  • @JackBashford 我已经更新了描述。
猜你喜欢
  • 2012-08-26
  • 2010-12-22
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 2013-04-02
  • 1970-01-01
相关资源
最近更新 更多