Produto com valor inalteravel

by João Vitor Scheuermann

JavaScript

// O programador deve garantir que o valor do produto não possa ser modificado após a criação da instancia de Produto, como feito abaixo!
const readOnlyVar = (context, name, value) => {
  Object.defineProperty(context, name, {
    value: value,
    writable: false,
    enumerable: false,
    configurable: false
  });
}

class Produto { 
    constructor(valor, quantidade) { 
        this._valor = valor;
        readOnlyVar(this, '_valor', valor)
        
        this._quantidade = quantidade;        
    } 
    get valor() { return this._valor * this._quantidade; } 
    get quantidade() { return this._quantidade; } 
    set valor(val) { this._valor = val; }
}

// não modificar daqui para baixo 
let produto = new Produto(10.00, 2);
console.log(produto.valor);
produto.valor = 100; // erro é disparado direto na tentativa de modificação 
console.log(produto.valor); // esta linha deve imprimir o valor 20 (valor x quatidade) ou lançar erro de modificação indevida