Foros del Web » Programando para Internet » Javascript »

problema con los parametros

Estas en el tema de problema con los parametros en el foro de Javascript en Foros del Web. Buenas gente del foro. llevo tan solo 2 meses aprendiendo js y como es normal me encuentro con algun que otro problema. La cuestion que ...
  #1 (permalink)  
Antiguo 21/03/2014, 08:15
 
Fecha de Ingreso: febrero-2014
Ubicación: Tarragona
Mensajes: 13
Antigüedad: 10 años, 1 mes
Puntos: 1
problema con los parametros

Buenas gente del foro. llevo tan solo 2 meses aprendiendo js y como es normal me

encuentro con algun que otro problema. La cuestion que tengo ahora

es esta IIFE(funcion autoinvocada) enlazada a la variable module que retorna un

objeto con diversos metodos.

en la parte privada tengo un constructor Counter que crea objetos con las

propiedades value y step.

posteriormente instancio dos objetos a partir de este constructor.

El problema surge en los metodos retrieve y add donde hay que especificar

el objeto como parametro.

cuando lo hago:

module.retrieve(score);

me indica que el objeto score no existe cuando en realidad si que existe en la

zona privada. de hecho he creado un metodo llamado r que retorna el objeto

score y me lo devuelve perfectamente.

alguien sabe que estoy haciendo mal? gracias por adelandado.


Código Javascript:
Ver original
  1. var module = (function () {
  2.  
  3.     function Counter(step){
  4.     this.value = 0;
  5.     this.step = step || 1;
  6.     }
  7.  
  8.  
  9.  
  10.     Counter.prototype.b = function () {
  11.     var that = this;
  12.     return {
  13.         set: function() { that.value += that.step; },
  14.         get: function() { return that.value; },
  15.         restart: function () {that.value = 0; }
  16.     };
  17.     };
  18.  
  19.     var score = new Counter(5);
  20.     var cErrors = new Counter();
  21.     var list = [score,cErrors];
  22.    
  23.     return {
  24.    
  25.     retrieve : function (obj) {
  26.         return obj.value;
  27.     },
  28.     add : function (object) {
  29.         object.b().set();
  30.     },
  31.     restart : function (){
  32.         list.forEach(function (e) {
  33.             e.b().get();
  34.         });    
  35.     },
  36.     r : function () {
  37.         return score;
  38.     }
  39.  
  40.     };
  41. })();
  #2 (permalink)  
Antiguo 21/03/2014, 13:03
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 2 meses
Puntos: 206
Respuesta: problema con los parametros

Me sorprende de que hayas programado ese código y no te percates de que score no existe fuera del closure que has creado dentro de la variable "module".

En el contexto general, fuera del closure creado por "module", en tu código sólo existe el objeto "module" al que le puedes ejecutar 4 funciones:
module.retrieve, module.add, module.restart y module.r

Las dos primeras aceptan como argumento una instancia de la clase counter; asi que nunca (salvo en un sólo caso que diré despues) podrás usarla, porque no puedes instanciar objetos del tipo Counter desde fuera del closure creado para "module", porque no existen.
El método restart no hace nada, ya que llama a un método que sólo se limita a devolver un valor; y como no se asigna a nada, ni se hace operacion alguna... pues lo dicho.

El método r al menos devuelve una de las instancias de la clase Counter, asi que lo que sí es posible en el contexto general de tu aplicación es por ejemplo un module.retrieve(module.r);
  #3 (permalink)  
Antiguo 21/03/2014, 14:26
 
Fecha de Ingreso: febrero-2014
Ubicación: Tarragona
Mensajes: 13
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: problema con los parametros

Antes de nada gracias por contestar.

la variable module esta asignado a una closure(?) que retorna un objeto con metodos.

lo que yo creia es que este objeto retornado tiene acceso a los objetos y variables privadas

incluso despues de que la funcion asignada a module se ejecute y devuelva el objeto.


No se si entiendo muy bien el concepto de las closures, pero por lo que entiendo, estas

guardan una referencia de las variables del scope donde ha sido creada.

supongo que la mejor solucion es retornar la variable list que contiene los objetos

para poder acceder a esos objetos ya que por lo que he leido, no deberia crear variables globales.

por cierto, la idea del metodo restart es utilizar el metodo restar t(tendre que cambiarle el

nombre) que se encuentra dentro del objeto devuelto por el metodo b.

Última edición por GreenKhulta; 21/03/2014 a las 14:37

Etiquetas: objetos, parametros
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 17:46.