Показать сообщение отдельно
  #2 (permalink)  
Старый 02.07.2019, 00:53
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,563

Точно также продолжая твою мысль:
//сделав так 
var cart = new Cart(oldCart);
//получишь 
cart = {
    items: oldCart.items || {};                
    totalQty: oldCart.totalQty || 0;           
    totalPrice: oldCart.totalPrice || 0;

    add: function(item, id) {
        var storedItem = this.items[id];
        if (!storedItem) {
            storedItem = this.items[id] = {item: item, qty: 0, price: 0};
        }
        storedItem.qty++;
        storedItem.price = storedItem.item.price * storedItem.qty;
        this.totalQty++;
        this.totalPrice += storedItem.item.price;
    },

    reduceByOne: function(id) {              
        this.items[id].qty--;
        this.items[id].price -= this.items[id].item.price;
        this.totalQty--;
        this.totalPrice -= this.items[id].item.price;

        if (this.items[id].qty <= 0) {
            delete this.items[id];
        }
    }
}
//и сможешь вызывать "методы" полученного объекта так:
cart.reduceByOne('id');
В js нет значения что и куда ты пихаешь, функции точно такие же объекты как и всё остальное.

P.S. Вообще код не правильный, т.к. каждый объект получит свои функции в качестве псевдометодов. Чтобы методы были настоящими(едины для всех созданных объектов) - надо добавлять их в прототип:
function Cart(oldCart) {
    this.items = oldCart.items || {};                
    this.totalQty = oldCart.totalQty || 0;           
    this.totalPrice = oldCart.totalPrice || 0;
}
Cart.prototype.add = function(item, id) {
        var storedItem = this.items[id];
        if (!storedItem) {
            storedItem = this.items[id] = {item: item, qty: 0, price: 0};
        }
        storedItem.qty++;
        storedItem.price = storedItem.item.price * storedItem.qty;
        this.totalQty++;
        this.totalPrice += storedItem.item.price;
 };

Cart.prototype.reduceByOne = function(id) {              
        this.items[id].qty--;
        this.items[id].price -= this.items[id].item.price;
        this.totalQty--;
        this.totalPrice -= this.items[id].item.price;

        if (this.items[id].qty <= 0) {
            delete this.items[id];
        }
 };
module.exports = Cart;
__________________
29375, 35

Последний раз редактировалось Aetae, 02.07.2019 в 01:01.
Ответить с цитированием