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

10 respostas
javascript
L

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?

10 Respostas

D

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.

L

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

D

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 é?

L

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

L

Veja o que eu fiz:

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

function totalVenda(preco, quantidade) {
    return console.log(preco * quantidade)
}
D
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.

D

console.log não retorna void?

L

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.

D

Respondendo rapidamente, não seria isso:

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

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

totalVenda(vendaAnterior);
L

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

Criado 13 de fevereiro de 2019
Ultima resposta 13 de fev. de 2019
Respostas 10
Participantes 4