Função em Javascript: Tem como criar uma função fora do objeto para calculo?

Preciso de ajuda, suponhamos que eu tenho um objeto VendaAnterior e nesse objeto eu tenho um atributo quantidade e outro preço e tenho que multiplicar os dois para ter o ValorTotalVendido.

Minha dúvida é: Tenho que criar uma função fora do objeto para fazer esse calculo? Ou tem outra forma?

1 curtida

Você pode criar uma função que devolva o valor deste cálculo, na classe, aí, usa invocando ela como uma função do objeto.

1 curtida

Darlan, eu tentei fazer dessa forma. Crie uma função que recebe como parâmetros os dois atributos, porém não esta rolando.

1 curtida

Se são atributos da classe, você não precisa passar os mesmos como parâmetros. No objeto existente, basta referenciar os mesmos, não é?

1 curtida

Sim, Mas como vou relacionar os mesmo com a função?

1 curtida

Veja o que eu fiz:

const vendaAnterior = {
   preco: 10.00,
   quantidade: 100
}

function totalVenda(preco, quantidade) {
    return console.log(preco * quantidade)
}
1 curtida
return this.preco * this.quantidade;

Obviamente, isso só funcionará se você entender todos os detalhes a respeito do this, explicados aqui.
Principalmente este trecho

“this” refers to new instance

When a function is invoked with “new” keyword then the function is known as constructor function and returns a new instance. In such cases, the value of “this” refers to newly created instance.

console.log não retorna void?

Hmmm, pensei que seu Objeto fosse uma função (function), por conta do título, assim:

function VendaAnterior() {
    this.preco = 10.00;
    this.quantidade = 100;
}

Com isso, basta criar uma função interna para retornar o cálculo.

1 curtida

Respondendo rapidamente, não seria isso:

const vendaAnterior = {
   preco: 10.00,
   quantidade: 100
}

function totalVenda(venda) {
    console.log(venda.preco * venda.quantidade);
}

totalVenda(vendaAnterior);

Como jah houveram várias respostas satisfatórias, seguem duas formas de fazer (tradicional e com os novos recursos do ecma6), só para complementar:

<script>
	class VendaAnteriorEcma6 {
		constructor(preco = 0.0, quantidade = 0) {
			this.preco = preco;
			this.quantidade = quantidade;
		}
		
		totalVenda() {
			return this.preco * this.quantidade;
		}
	}
	
	function VendaAnterior(preco = 0.0, quantidade = 0) {
		var _preco = preco;
		var _quantidade = quantidade;
		
		function totalVenda() {
			return _preco * _quantidade;
		}
		
		return {
			totalVenda: totalVenda
		}
	}
	
	var v1 = new VendaAnterior(10.5, 100);
	var v2 = new VendaAnteriorEcma6(12.5, 50);
	
	console.log('Total Venda (v1): ' + v1.totalVenda());
	console.log('Total Venda (v2): ' + v2.totalVenda());
</script>

Ecma6 Referência: ECMAScript 6 — New Features: Overview & Comparison

1 curtida