JavaScript - Consulta clase y subclase

 
Vista:
sin imagen de perfil

Consulta clase y subclase

Publicado por Ruben (2 intervenciones) el 23/02/2017 14:41:37
Hola tengo una duda, relleno un array en la función comenzar con datos de televisores por ejemplo, y luego por cada elemento, llamo a la funcion calcularPrecioFinal de la subclase.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function comenzar(){
	var televisores = [];
 
	var mi_televisor_1 = new Televisor(20,"blanco","A",40,10,false);
	televisores.push(mi_televisor_1);
 
	var mi_televisor_2 = new Televisor(20,"azul","B",40,10,true);
	televisores.push(mi_televisor_2);
 
	var mi_televisor_3 = new Televisor(20,"blanco","C",40,10,false);
	televisores.push(mi_televisor_3);
 
	televisores.forEach(function(televisor, index){
		televisor.calcularPrecioFinal();
		console.log ('precioFinal: '+televisor.precioFinal);
	});
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//CLASE PRINCIPAL
function Electrodomestico(precioBase, color, consumoEnergetico, peso ){
 
	this.color=color || 'blanco';
	this.consumoEnergetico=consumoEnergetico || "F";
	this.precioBase=precioBase || 100;
	this.peso=peso || 5;
	this.precioFinal;
 
	this.calcularPrecioFinal = function() {
		//CALCULOS
		this.precioFinal = this.precioBase;
	}
 
}
 
//SUBCLASE
function Televisor(precioBase, color, consumoEnergetico, peso, resolucion, sintonizador) {
	this.resolucion=resolucion || 20;
	this.sintonizador=sintonizador || false;
 
	this.base = Electrodomestico;
	this.base(precioBase, color, consumoEnergetico, peso);
 
         this.precioFinal = Electrodomestico.calcularPrecioFinal(); //ERROR isnot a function
 
	this.calcularPrecioFinal = function() {
	      //CALCULOS
              this.precioFinal = this.precioFinal + 500;
	}
 
}
Televisor.prototype = new Electrodomestico ();

El array televisores se rellena correctamente con todos los valores.

La pregunta es:
En la subclase Televisor, como capturo el valor de precioFinal "lo que está en negrita", que se calcula en la funcion calcularPrecioFinal de la clase principal???
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Consulta clase y subclase

Publicado por Iván (3 intervenciones) el 23/02/2017 20:49:11
Buenas

Si no entiendo mal lo que estas intentando hacer es una herencia, para eso necesitas que tu objeto Televisor herede de Electrodoméstico y eso se consigue llamando con call a Electrodoméstico y pasandole tu objeto televisor, con eso en tu scope this en televisor tendrás los atributos y métodos de Electrodoméstico en tu scope Televisor y ya podrás usarlo perfectamente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
function comenzar(){
	var televisores = [];
 
	var mi_televisor_1 = new Televisor(20,"blanco","A",40,10,false);
	televisores.push(mi_televisor_1);
 
	var mi_televisor_2 = new Televisor(20,"azul","B",40,10,true);
	televisores.push(mi_televisor_2);
 
	var mi_televisor_3 = new Televisor(20,"blanco","C",40,10,false);
	televisores.push(mi_televisor_3);
 
	televisores.forEach(function(televisor, index){
		televisor.calcularPrecioFinal();
		console.log ('precioFinal: '+televisor.precioFinal);
	});
}
 
function Electrodomestico(precioBase, color, consumoEnergetico, peso ){
 
	this.color=color || 'blanco';
	this.consumoEnergetico=consumoEnergetico || "F";
	this.precioBase=precioBase || 100;
	this.peso=peso || 5;
	this.precioFinal;
 
	this.calcularPrecioFinal = function() {
		//CALCULOS
		return this.precioBase;
	}
 
}
 
//SUBCLASE
function Televisor(precioBase, color, consumoEnergetico, peso, resolucion, sintonizador) {
        Electrodomestico.call(this)
	this.resolucion=resolucion || 20;
	this.sintonizador=sintonizador || false;
 
	this.base = Electrodomestico;
	this.base(precioBase, color, consumoEnergetico, peso);
 
         this.precioFinal = this.calcularPrecioFinal(); //ERROR isnot a function
 
	this.calcularPrecioFinal = function() {
	      //CALCULOS
              this.precioFinal = this.precioFinal + 500;
	}
 
}
Televisor.prototype = new Electrodomestico ();
comenzar();

Fíjate en la linea 36 como hace la herencia con Electrodoméstico y como en la linea 43 llama al método de la clase Electrodomestico
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consulta clase y subclase

Publicado por Ruben (2 intervenciones) el 24/02/2017 09:49:58
lo resolvi poniendo:

this.calcularPrecio();

en la linea 43, y ya entra y hace los calculos correctamente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar