Foros del Web » Programando para Internet » Javascript »

Llamada entre métodos de una misma clase.

Estas en el tema de Llamada entre métodos de una misma clase. en el foro de Javascript en Foros del Web. Hola, gente FdW. Mi consulta hacia ustedes es la siguiente. En el código de mas abajo, eh definido una clase llamada Meter(), y dos métodos, ...
  #1 (permalink)  
Antiguo 31/03/2009, 14:08
Avatar de TIaGoX  
Fecha de Ingreso: julio-2008
Ubicación: Loma Hermosa @ Buenos Aires
Mensajes: 49
Antigüedad: 15 años, 9 meses
Puntos: 2
Pregunta [SOLUCIONADO] Llamada entre métodos de una misma clase.

Hola, gente FdW. Mi consulta hacia ustedes es la siguiente.

En el código de mas abajo, eh definido una clase llamada Meter(), y dos métodos, además de algunos atributos para esa clase. Mi problema es que cuando quiero invocar uno de esos dos métodos desde el otro método, o desde el mismo constructor de la clase. Me dice:

Cita:
this.drawMeter is not a function
.../meter.js
Line 88
Código PHP:
var Meter = function(parametros) {
    
/* Declaración e inicializacion de las atributos de la clase. */
    
this.id = (parametros.id) ? parametros.id 'meter'+numRandom();
    
this.ancho = (parametros.ancho) ? parametros.ancho null;
    
this.alto = (parametros.alto) ? parametros.alto null;
    
this.canvasOutput;
    
this.imgFondo = new Image();
    
this.imgIndicador = new Image();
    [...]
}

Meter.prototype.render = function(){
    [...]
    
this.imgFondo.onload = function(){
        
loadFondo true;
        if(
loadIndicador)this.drawMeter();
    }
    
this.imgFondo.src 'fondo.png';
    
this.imgFondo.id 'bg_meter';
    [...]
}

Meter.prototype.drawMeter = function(){
    [...]

(Nota: Posiblemente haya inconsistencia o que falten algunas variables ya que simplifique el código para poner solo un ejemplo de mi problema)

Espero que se entienda cual es mi inquietud y puedan darme una mano con esto.

Saludos a todos.
TIaGoX

Última edición por TIaGoX; 22/06/2009 a las 09:52 Razón: Solucionado.
  #2 (permalink)  
Antiguo 31/03/2009, 14:41
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Llamada entre métodos de una misma clase.

El problema es que en algunas partes de tu ejemplo this no apunta adonde vos creés. Probá este ejemplo y fijate cómo la segunda referencia a this (hecha de manera indirecta, sí apunta al objeto esperado):
Código PHP:
<script>
var 
Meter = function(parametros) {
    
this.id = (parametros.id) ? parametros.id 'meter'+numRandom();
}

Meter.prototype.render = function(){
    var 
_this=this;
    (function(){
        
alert(this.constructor)
        
alert(_this.constructor)
    })();
}


var 
m=new Meter({'id':'algo'});
m.render();
</script> 
  #3 (permalink)  
Antiguo 01/04/2009, 06:56
Avatar de TIaGoX  
Fecha de Ingreso: julio-2008
Ubicación: Loma Hermosa @ Buenos Aires
Mensajes: 49
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Llamada entre métodos de una misma clase.

Perfecto Panino5001, eso solucionó, mi problema.

Ahora me queda la duda sobre como es que Javascript pierde esa referencia a this, o como solo es correcto en ciertos casos. Porque de hecho en el ejemplo utilice el prototype de objetos, pero también lo había probado con definir los métodos dentro de la misma clase.

Bueno, si alguien conoce la respuesta a mi pregunta o puede facilitar algunos links para complementar a la solución serán bienvenidos de mi parte.

Saludos.
TIaGoX
  #4 (permalink)  
Antiguo 01/04/2009, 07:10
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Llamada entre métodos de una misma clase.

Investigá sobre closures y ámbitos
También sobre los métodos call y apply
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 12:47.