const ShoppingCart = function(name) { this.name = name; this.items = []; return this; }; ShoppingCart.prototype.addItem = function(item) { this.items.unshift(item); }; Object.defineProperty(ShoppingCart.prototype, "count", {get() { return this.items.length; }}); let cart = new ShoppingCart('james'); cart.addItem('socks'); cart.addItem('pants'); let cart2 = new ShoppingCart('semaj'); cart2.addItem('socks'); console.log(cart); console.log(cart2); // hm, I want to add some logging to addItem ShoppingCart.prototype.addItem = function(item) { console.log(`adding item ${item} to ${this}`); this.items.push(item); }; cart2.addItem('hat'); console.log(cart2.count, "items in cart2"); const OneSpoonCart = function(name, limit) { ShoppingCart.call(this, name); this.limit = limit; return this; }; OneSpoonCart.prototype = Object.create(ShoppingCart.prototype); OneSpoonCart.prototype.constructor = OneSpoonCart; OneSpoonCart.prototype.addItem = function(item) { ShoppingCart.prototype.addItem.call(this, item); this.items = this.items.slice(0, this.limit); }; let cart3 = new OneSpoonCart("james", 3); console.log('limited cart', cart3); cart3.addItem('socks'); cart3.addItem('hat'); cart3.addItem('pants'); cart3.addItem('gloves'); console.log('limited cart', cart3); console.log(cart3.count, "items");