Foros del Web » Programando para Internet » Javascript »

Clonar funcion

Estas en el tema de Clonar funcion en el foro de Javascript en Foros del Web. Hola, Tengo una Funcion que sirve como contenedor de un Objeto. El problema es que nesesito varios de estos contenedores, y nesesito generarlos Dinamicamente, y ...
  #1 (permalink)  
Antiguo 12/02/2011, 20:01
Avatar de ClubIce  
Fecha de Ingreso: diciembre-2008
Mensajes: 216
Antigüedad: 15 años, 4 meses
Puntos: 2
Pregunta Clonar funcion

Hola,

Tengo una Funcion que sirve como contenedor de un Objeto. El problema es que nesesito varios de estos contenedores, y nesesito generarlos Dinamicamente, y no se como hacer para crear una copia independiente de la funcion (no un prototipo).

La funcion que intento clonar es la siguiente:

Código Javascript:
Ver original
  1. $scene = function (value) {
  2.     if (typeof(value) == 'undefined') {
  3.         return $scene.data;
  4.     }
  5.     if ($scene.data != null) {
  6.         $scene.data.terminate();
  7.         $scene.data = null;
  8.     }
  9.     $scene.data = value;
  10.     $scene.data.main ? $scene.data.main() : $scene.main();
  11.     $scene.data.start();
  12. }
  13.   $scene.data = null
  14.     $scene.main = function() {
  15.         Graphics.interval = setInterval(function() {
  16.             Keyboard.update()
  17.             $scene.update();
  18.             Graphics.update()
  19.         },1)
  20.     }
  21.     $scene.update = function() {
  22.         $scene.data.update()
  23.     }
  #2 (permalink)  
Antiguo 12/02/2011, 20:34
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Clonar funcion

buenas...

me parece que estas haciendo un patron inverso al modelo de objetos. o sea, en lugar objetos contener metodos, las funciones contiene objetos. no se, en mi opinion me parece que lo complicas. de todos modos, podrias hacer una funcion que devuelva funciones literales. de ser necesario, al mismo tiempo declaras el objeto a esa funcion.

Código:
function fn(){
var _fn = function(){
...
}
_fn.object = {};
// bien puedes crear un nuevo objeto u obtenerlo por argumento al invocar fn ;
return _fn;
}
no estoy seguro pero supongo que es eso lo que quieres hacer. en javascript, clonar funciones como tal no es posible. si intentas asignar una funcion a una variable o propiedad con el operador asignacion [=], la funcion se pasa como referencia y no como valor.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 12/02/2011, 21:17
Avatar de ClubIce  
Fecha de Ingreso: diciembre-2008
Mensajes: 216
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: Clonar funcion

Tienes razon, me estoy complicando mucho, pero lo que intentaba hacer con esa funcion, era un accesor, ya que con JS no es posible controlar lo que entra y sale de una propiedad.
  #4 (permalink)  
Antiguo 12/02/2011, 21:25
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Clonar funcion

si bien entiendo lo que es un accesor, me parece que podrias hacer algo con funciones setter y getter y/o una combinacion con closure. pero estas funciones, aunque creo que ya estan estandarizadas, me parece que aun no estan muy bien distribuidas. con closure, puedes hacer funciones publicas especificamente para leer y asignar valor a una propiedad privada. en estas funciones podrias determinar que es lo que entra y sale de una propiedad. no se, es una idea si bien entendi lo que necesitas. si necesitas referencia sobre este patron de propiedades privadas, http://www.crockford.com/javascript/private.html
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: clonar, 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 03:33.