[ES7] Getter and setter with Object.freeze
We want to only freeze the private variable when we get it and set it:
class Cart { #items; constructor(items = []) { this.value = items; } set value(items) { this.#items = Object.freeze(items); } get value() { return Object.freeze(this.#items); } get count() { return this.value.length; } add(item) { this.value = [...this.value, item]; } remove(id) { this.value = this.value.filter((item) => item.id !== id); } } const cart = new Cart(); const hotdog = { id: '🌭', name: 'Posh Dog', price: 399 }; cart.add(hotdog); console.log(cart.value);