Foros del Web » Programando para Internet » Javascript »

Implementar metodos en una nueva funcion

Estas en el tema de Implementar metodos en una nueva funcion en el foro de Javascript en Foros del Web. Tengo una función, de la forma ej: <CODE> var OpcForm = { Read:function(datos,newParm){ datos:'', this.xParm = { func:defaultfuncion, xx:dfd, yy:fdf, ... }, Write:function(datos,newParm){ this.xParm = ...
  #1 (permalink)  
Antiguo 02/02/2009, 15:36
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 8 meses
Puntos: 15
Pregunta Implementar metodos en una nueva funcion

Tengo una función, de la forma ej:

<CODE>
var OpcForm = {
Read:function(datos,newParm){
datos:'',
this.xParm = {
func:defaultfuncion,
xx:dfd,
yy:fdf,
...
},
Write:function(datos,newParm){
this.xParm = {
aa:dfd,
bb:fdf,
cc:fdf
}
}</CODE>

Algo así mas o menos... Resulta que mi usuario carga mi lib, y deseo que el pueda implementar en una nueva función(Con el nombre que el quiera darle). en donde pueda heredar mis métodos Read y Write.

Algo así:

<CODE>
OpcForm.Read('...',{
func:defaultfuncion,
...
}
);
</CODE>

Espero me puedan ayudar, y espero ser claro...
  #2 (permalink)  
Antiguo 02/02/2009, 16:04
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, 5 meses
Puntos: 834
Respuesta: Implementar metodos en una nueva funcion

Normalmente, se hace así:
Código PHP:
<script>
var 
obj=(function(){
    var 
mPriv={
    
metodo:function(m){alert(m);},
    
propiedad:'algo';
    }
    return {
        
extend:function(o){
            for(var 
i in mPriv)
                
o[i]=mPriv[i];
            return 
o;
        },
        
add:function(o){
            for(var 
i in o)
                
mPriv[i]=o[i];
        }    
    }
})()
var 
pp={}
var 
nuevo={
    
nuevoMetodo:function(m2){alert(m2);}
}
obj.add(nuevo);
pp=obj.extend(pp);
pp.metodo('hola');
alert(pp.propiedad);
pp.nuevoMetodo('abc');
</script> 
Con el método add agregás nuevos métodos a tu objeto base y con extend hacés que cualquier objeto herede las propiedades y métodos de ese objeto base (más o menos como hacen los frameworks)
  #3 (permalink)  
Antiguo 02/02/2009, 17:16
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 8 meses
Puntos: 15
Pregunta Respuesta: Implementar metodos en una nueva funcion

Realmente me sorprendiste Panino5001, es un código muy difícil de encontrar... gracias por tan pronta respuesta.

Pero...No entiendo muy bien que hacen los dos () al final de la función principal?
})()...

Me la podrías aclarar un poco?

Segun creo:
//Esto recibe una función como parámetro?
var obj=(...)

//es a quien se le heredaran los métodos cierto?
var pp={}

//Esto lo invocamos para crear una salida?
var nuevo={
nuevoMetodo:function(m2){alert(m2);}
}

//Esto prepara nuevo para ser adicionado a pp...
obj.add(nuevo);
//Esto invoca al proceso de extender las capacidades de pp
pp=obj.extend(pp);
//Le paso un parametro a nuevo
pp.metodo('hola');
//Recupero la propuiedad desde pp
alert(pp.propiedad);
//Le paso un parametro a nuevométodo, el cual ya hace parte de pp
pp.nuevoMetodo('abc');

//Creo que es asi?
  #4 (permalink)  
Antiguo 02/02/2009, 17:39
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, 5 meses
Puntos: 834
Respuesta: Implementar metodos en una nueva funcion

Vamos por partes, cuando queremos que una función anónima se autoejecute, usamos esta sintaxis:
Código PHP:
(function(){...})(); 
Es decir, la envolvemos en paréntesis y agregamos dos más al final, como cuando invocamos una función con nombre para que se ejecute.
Esa función retorna un objeto con 2 métodos públicos (add y extend), pero a su vez contiene en su interior la declaración de un objeto que alberga los métodos y propiedades privadas, que son los que están destinados a heredarse a otros objetos.
pp es el objeto que queremos extender. El método add de obj es el que permite agregarle a obj más métodos para que sean heredados por cualquier objeto (en este caso pp) que deseemos que tenga los métodos y propiedades privadas del objeto obj.
Adicionalmente, lo que hacen normalmente los frameworks es agregar una variable global para hacer referencia a los objetos extendidos. En este caso, por ejemplo, la variable podría ser:
Código PHP:
window.$=obj.extend 
Entonces, podés referenciar el objeto como:
Código PHP:
$(pp
Más o menos así funciona, aunque hay que optimizarlo mejor para usarlo de esa manera, pero así como está es más fácil de entender.
  #5 (permalink)  
Antiguo 03/02/2009, 07:44
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 8 meses
Puntos: 15
De acuerdo Respuesta: Implementar metodos en una nueva funcion

Vale, muchas gracias Andrés... no solo por tu tiempo, si no por compartir tu basto conocimiento en esta área, que realmente es algo más o menos nueva para mí.

Esto no lo sabia:

Es decir, la envolvemos en paréntesis y agregamos dos más al final.

$(pp), que hace el signo pesos en este lugar?, es la forma de acceder a la variable global?
  #6 (permalink)  
Antiguo 03/02/2009, 08:05
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, 5 meses
Puntos: 834
Respuesta: Implementar metodos en una nueva funcion

Para declarar una variable global en javascript basta con declararla fuera de una función, ejemplo: nn='algo'; Aunque lo más correcto es anteponerle el prefijo var: var nn='algo'; Ahora, si estás dentro de una función y necesitás declarar una variable como global, un camino es hacer que cuelgue del objeto window: window.nn='algo'; o window['nn']='algo';, ya que si usás la palabra reservada var dentro de una función lo que hacés es convertir la variable en cuestión en local a la función.
En el ejemplo, $ se convierte en un alias de obj.extend, y como el método extend te devuelve el objeto extendido (return o), usar $(pp) es lo mismo, pero abreviado, que usar obj.extend(pp).
  #7 (permalink)  
Antiguo 03/02/2009, 09:11
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 8 meses
Puntos: 15
De acuerdo Respuesta: Implementar metodos en una nueva funcion

Listo, creo que todo claro...Muchas gracias por toda la información y post explicación.
Solo que en este foro no encuentro información muy similar.
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 18:40.