Foros del Web » Programando para Internet » Javascript »

Problema con clases en javascript

Estas en el tema de Problema con clases en javascript en el foro de Javascript en Foros del Web. Buenas tengo una duda con la clases en javascript que me estan volviendo loco tengo esta clase Código: // JavaScript Document // JavaScript Document function ...
  #1 (permalink)  
Antiguo 25/02/2013, 13:48
 
Fecha de Ingreso: abril-2009
Mensajes: 356
Antigüedad: 15 años, 7 meses
Puntos: 7
Problema con clases en javascript

Buenas tengo una duda con la clases en javascript que me estan volviendo loco

tengo esta clase

Código:
// JavaScript Document

// JavaScript Document

function DefinirTropas (uno,dos,tres,cuatro,cinco,seis,siete,ocho,nueve) {
	
	//definimos todos los valores de las tropas
	this.nombre = uno;
	this.imagen = dos;
	this.ataque = tres;
	this.defensa = cuatro;
	this.movilidad = cinco;
	this.distancia = seis;
	this.salud = siete;
	this.bando = ocho;
	this.posicion = nueve;
	
	//definimos la posicion en el mapa
	this.CrearPosicion = DefinirPosicion	
	
	function DefinirPosicion  () {
		
		this.posicion = "NuevaPosicion";
		
	}
}
y para crearla

Código:
//creamos un array para guardar las tropas
			Tropa = new Array ();
				
			//definimos todas las tropas
			Tropa[0] = new DefinirTropas ("Zombie","",100,10,1,1,100,1,"");		
			Tropa[1] = new DefinirTropas ("Arquero","",100,10,3,3,100,0,"");
			Tropa[2] = new DefinirTropas ("Zombie","",100,10,1,1,100,1,"");
			Tropa[3] = new DefinirTropas ("Arquero","",100,10,3,3,100,0,"");
			Tropa[4] = new DefinirTropas ("Arquero","",100,10,3,3,100,0,"");
			Tropa[5] = new DefinirTropas ("Zombie","",100,10,1,1,100,1,"");
el problema es que cuando quiero redefinir un atributo de esta clase me da error

Código:
//colocamos las tropas en el mapa
			for (a = 0; a <= Tropa.length; a++)	 {
				Tropa[a].CrearPosicion;				
			}
Que estoy haciendo mal?

y mi segunda duda es como ago para que las funciones de mi clase sean privadas y solo se pueda aceder a ellas en la clase?

Gracias adelantada por la respuesta :)

saludos
__________________
Cannabis; todo sobre el mundo de la marihuana
  #2 (permalink)  
Antiguo 25/02/2013, 13:56
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 16 años, 4 meses
Puntos: 103
Respuesta: Problema con clases en javascript

hola!
la función esta mal creada

Código Javascript:
Ver original
  1. this.DefinirPosicion =function(){
  2.         this.posicion = "NuevaPosicion";
  3.     }

y luego no estas ejecutando la funcion aca

Cita:
for (var a = 0; a <= Tropa.length; a++) {
Tropa[a].DefinirPosicion();
}

con eso en rojo ahi se ejecuta

un saludo ! y espero que os haya iluminado !


si te sirvio podraimos arreglar con unas de tus plantas ;) xD
  #3 (permalink)  
Antiguo 25/02/2013, 16:01
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 10 meses
Puntos: 36
Respuesta: Problema con clases en javascript

Nada mas para aclarar, cuando esta en el for usando CrearPosicion(), es lo mismo que usar la funcion como mencionaste chwc, por que al final CrearPosicion es una referencia de DefinirPosicion(), su error esta que intenta llamar la funcion como si estuviera llamando una propiedad, y es que le falta los parentesis, algo asi:

Cita:
for (a = 0; a <= Tropa.length; a++) {
Tropa[a].CrearPosicion();
}
Saludos.
__________________
Reedyseth
Te ayudo? No olvides dar un +
blog:http://behstant.com/blog
En el blog:Tutoriales de Desarrollo Web PHP, Javascript, BD y más.
  #4 (permalink)  
Antiguo 25/02/2013, 18:10
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 16 años, 4 meses
Puntos: 103
Respuesta: Problema con clases en javascript

Cita:
Iniciado por Reedyseth Ver Mensaje
Nada mas para aclarar, cuando esta en el for usando CrearPosicion(), es lo mismo que usar la funcion como mencionaste chwc, por que al final CrearPosicion es una referencia de DefinirPosicion(), su error esta que intenta llamar la funcion como si estuviera llamando una propiedad, y es que le falta los parentesis, algo asi:



Saludos.
Hola !

he leido lo que comentas, y hay que ver bien a fondo, un problema radica en esta parte

Código Javascript:
Ver original
  1. this.CrearPosicion = DefinirPosicion   
  2.    
  3.     function DefinirPosicion  () {
  4.        
  5.         this.posicion = "NuevaPosicion";
  6.        
  7.     }

primero que nada, CrearPosicion esta obteniendo como valor undefined, ya que en ese momento DefinirPosicion no existe, pero DefinirPosicion es generado en la proxima linea

ya que

Código Javascript:
Ver original
  1. this.CrearPosicion = function() {      
  2.         this.posicion = "NuevaPosicion";       
  3.     }

bastaria,

asi que seria mejor que la funcion sea asi ( le agrego DefinirPosicion por las dudas )
Código Javascript:
Ver original
  1. function DefinirTropas (uno,dos,tres,cuatro,cinco,seis,siete,ocho,nueve) {
  2.    
  3.     //definimos todos los valores de las tropas
  4.     this.nombre = uno;
  5.     this.imagen = dos;
  6.     this.ataque = tres;
  7.     this.defensa = cuatro;
  8.     this.movilidad = cinco;
  9.     this.distancia = seis;
  10.     this.salud = siete;
  11.     this.bando = ocho;
  12.     this.posicion = nueve;
  13.    
  14.     //definimos la posicion en el mapa
  15.        
  16.    
  17.     this.CrearPosicion = function() {      
  18.         this.posicion = "NuevaPosicion";       
  19.     }
  20. this.DefinirPosicion = this.CrearPosicion
  21. }

igual me parece que lo que quiso hacer, era tener DefinirPosicion como una funcion Global, pero lo puso adentro de esa funcion

un saludo !!
  #5 (permalink)  
Antiguo 26/02/2013, 08:11
 
Fecha de Ingreso: abril-2009
Mensajes: 356
Antigüedad: 15 años, 7 meses
Puntos: 7
Respuesta: Problema con clases en javascript

antes que nada gracias por responder :), pero sigo con el mismo problema

lo que intento hacer como bien supondreis es un juego.

la idea es que yo cuando creo un personaje defino unos datos de este como son nombre, imagen, movilidad...

y ahora lo que quiero es que al llamar por ejemplo a

Tropa[0].DefinirPosicion

me redefina la posicion de este objeto haciendo que

Tropa[0].posicion (que es donde se guarda la posicion en el mapa de ese soldado)

se redefina con un nuevo valor

todo esto lo ago para que cada x segundos traves de setInterval pueda editar la posicion en el mapa de ese soldado y este pueda moverse.

Tendre varios metodos como:

Tropa[0].Atacar, Tropa[0].Moverse, Tropa[0].Morir ...

y en cada una de estas llamadas lo que quiero conseguir es redefinir las variables que se crean para ese objeto

no se si me explico muy bien, pero se agradece muchisimo vuestra ayuda

saludos
__________________
Cannabis; todo sobre el mundo de la marihuana
  #6 (permalink)  
Antiguo 26/02/2013, 10:26
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 10 meses
Puntos: 36
Respuesta: Problema con clases en javascript

Que tal companero, mira la solucion es mas simple de lo que el problema parece, tienes todos errores que son criticos y por eso no funciona tu codigo:

Tu problema se presenta mas que en la clase en tu for
Cita:
//colocamos las tropas en el mapa
for ( a = 0; a <= Tropa.length; a++) {
Tropa[a].CrearPosicion
}

Como te puedes percatar en el for le tienes que a = 0 y que sea menor igual a 5, como tienes un arreglo de 5 y el arreglo comienza de 0 le estas diciendo que vaya auna sexta posicion, lo que tendrias que hacer es dejar que sea menor que 5, o que iniciar tu variable a en 1, tampoco estas invocando el metodo con Tropa[a].CrearPosicion sino que con eso haces referencia a una propiedad como te habia comentado en un post pasado, entonces la funcion deberia de quedar algo asi:

Código Javascript:
Ver original
  1. //colocamos las tropas en el mapa
  2.             for ( a = 0; a < Tropa.length; a++) {
  3.                 Tropa[a].CrearPosicion();
  4.             }

o asi:

Código Javascript:
Ver original
  1. //colocamos las tropas en el mapa
  2.             for ( a = 1; a <= Tropa.length; a++) {
  3.                 Tropa[a].CrearPosicion();
  4.             }

Ya probe el codigo asi y funciona a la perfeccion, lo que si te recomiendo es que te metas mas en el tema de objectos por que estas haciendo algo muy generico y es programacion no muy controlada, te invito a que leas un poco sobre contextos en la clase(publico,privado, privilegiado) y tambien prototype, para que puedas hacer un buen uso de los objectos en javascript,

saludos. :)
__________________
Reedyseth
Te ayudo? No olvides dar un +
blog:http://behstant.com/blog
En el blog:Tutoriales de Desarrollo Web PHP, Javascript, BD y más.
  #7 (permalink)  
Antiguo 26/02/2013, 12:32
 
Fecha de Ingreso: abril-2009
Mensajes: 356
Antigüedad: 15 años, 7 meses
Puntos: 7
Respuesta: Problema con clases en javascript

Muchisimas gracias :)

funciona perfectoooooooooo!

La verdad es que estoy buscando algun videotutorial o algun libro bueno para aprender POO de javascritp pero es dificil de encontrar.

Las clases no distan mucho de php pero este me resulta mas llevadero.

Si me pudierais sugerir algun buen libro seria de mucha ayuda

y gracias a todos los que me han ayudado

saludos
__________________
Cannabis; todo sobre el mundo de la marihuana
  #8 (permalink)  
Antiguo 26/02/2013, 12:40
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 10 meses
Puntos: 36
Respuesta: Problema con clases en javascript

Una vez que sepas lo basico de javascript puedes leer este libro "Pro JavaScript Techniques" de John Resig el creador de jQuery.

Saludos.
__________________
Reedyseth
Te ayudo? No olvides dar un +
blog:http://behstant.com/blog
En el blog:Tutoriales de Desarrollo Web PHP, Javascript, BD y más.
  #9 (permalink)  
Antiguo 26/02/2013, 12:41
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 16 años, 4 meses
Puntos: 103
Respuesta: Problema con clases en javascript

codeacademy es de lo mejor que he visto para aprender ! un saludo

Etiquetas: clases, funcion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:22.