Foros del Web » Programando para Internet » Javascript »

Instanciar un objeto a partir de un string

Estas en el tema de Instanciar un objeto a partir de un string en el foro de Javascript en Foros del Web. Hola, ¿es posible en JavaScript (como lo es en PHP) crear una variable en base al string de una clase? Indico un ejemplo para que ...
  #1 (permalink)  
Antiguo 23/02/2009, 13:10
 
Fecha de Ingreso: enero-2009
Mensajes: 11
Antigüedad: 15 años, 3 meses
Puntos: 0
Instanciar un objeto a partir de un string

Hola, ¿es posible en JavaScript (como lo es en PHP) crear una variable en base al string de una clase?
Indico un ejemplo para que entiendan especificamente a lo que me refiero:

class Persona
{
}

function Probar()
{
var nombreClase = "Persona()";
var oPersona = new nombreClase;
}


Por favor, si alguien conoce si es posible o si existe alguna funcion para crear objetos dinamicamente.
Muchas gracias,
Saludos.
  #2 (permalink)  
Antiguo 23/02/2009, 13:36
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Instanciar un objeto a partir de un string

En Javascript no hay clases. ¿Puedes describir un poco más qué es lo que intentas hacer?
  #3 (permalink)  
Antiguo 23/02/2009, 13:48
 
Fecha de Ingreso: enero-2009
Mensajes: 11
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Instanciar un objeto a partir de un string

Es cierto, es un lenguaje orientado a prototipos y no a clases. Lo que quiero hacer esta claro en el codigo, quiero crear una instancia a partir del string de la clase y no de la clase, entonces mediante un parametro podria instanciar el objeto que corresponda.
Vuelvo a escribir el codigo por si no me exprese bien:

function Persona ()
{
// Variables
var edad="";
// Funciones
this.setEdad(_value){this.edad = _value;}
this.getEdad(){return this.edad;}
}

function instanciarClases(_nombreClase)
{
// La manera de instanciar la clase Persona seria:
var oPersona = new Persona();
// Ahora, yo no quiero colocar el nombre de la clase de manera estatica porque
// no lo conozco, lo que necesito es instanciar dinamicamente, es decir, a partir
// de un string crear la instancia del prototipo correspondiente
var oPersona = new _nombreClase; // _nombreClase contiene "Persona()"

}
  #4 (permalink)  
Antiguo 23/02/2009, 14:02
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Instanciar un objeto a partir de un string

Preguntaba más bien por la idea, por qué querías hacer a un nivel un poco más alto. Porque quizá se podría plantear de otro modo, pensar en una solución de otro tipo.

De todas formas, si lo que quieres es hacer exactamente lo que pones ahí sin más, podrías utilizar eval().
  #5 (permalink)  
Antiguo 23/02/2009, 14:07
Avatar de jseros  
Fecha de Ingreso: agosto-2008
Ubicación: Bogotá
Mensajes: 218
Antigüedad: 15 años, 8 meses
Puntos: 18
Respuesta: Instanciar un objeto a partir de un string

Saludos,

eval() funcionaría pero no es muy recomendable su uso por cuestiones de seguridad.

Exitos.
  #6 (permalink)  
Antiguo 23/02/2009, 14:11
 
Fecha de Ingreso: enero-2009
Mensajes: 11
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Instanciar un objeto a partir de un string

Muchas gracias, pero no me sirve el eval(). No crea una instancia de algun prototipo en particular a partir del nombre del prototipo. Ya investigue sobre este tema y no encontre modo ni soluciones en internet. En php lo que planteo se puede realizar muy facilmente, queria saber si era posible en javascript.
  #7 (permalink)  
Antiguo 23/02/2009, 14:21
 
Fecha de Ingreso: enero-2009
Mensajes: 11
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Instanciar un objeto a partir de un string

Por favor, si creen que el eval() funciona, ¿pueden colocar un ejemplo que previamente haya funcionado (que hayan probado que funciona)?
No tengo dudas que me crea una instancia, pero no genera la instancia del prototipo correspondiente con sus atributos y funciones.
Muchas gracias.
  #8 (permalink)  
Antiguo 23/02/2009, 14:27
Avatar de jseros  
Fecha de Ingreso: agosto-2008
Ubicación: Bogotá
Mensajes: 218
Antigüedad: 15 años, 8 meses
Puntos: 18
Respuesta: Instanciar un objeto a partir de un string

Saludos

var prot = "Object";
var instancia_prot = eval( "new " + prot );
alert( instancia_prot );
  #9 (permalink)  
Antiguo 23/02/2009, 14:35
 
Fecha de Ingreso: enero-2009
Mensajes: 11
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Instanciar un objeto a partir de un string

Funciona. Muchas gracias!
  #10 (permalink)  
Antiguo 23/02/2009, 14:42
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Instanciar un objeto a partir de un string

Utiliza Callback o tal vez esto funcione:

var parametro ="mivar";
window[parametro]

window['']: Esto permite definir el uso de una variable a nivel global.

Y entonces sería:
var objeto = new window[miClase]();

Podría funcionar.

Hazlo y me cuentas, aunque estoy mas que seguro de que funciona...
Eval() esta algo un poco desaconsejado, procura evitarlo(Consumo de recursos, seguridad, fiabilidad...)
  #11 (permalink)  
Antiguo 23/02/2009, 14:50
Avatar de jseros  
Fecha de Ingreso: agosto-2008
Ubicación: Bogotá
Mensajes: 218
Antigüedad: 15 años, 8 meses
Puntos: 18
Respuesta: Instanciar un objeto a partir de un string

Tanto el uso de eval() como el de el acceso a variables globales se consideran malas practicas de seguridad y programación. En estos casos es mejor tener bien encapsulado lo que se piensa hacer por medio de miembros protegidos o privados.
  #12 (permalink)  
Antiguo 23/02/2009, 15:30
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Busqueda Respuesta: Instanciar un objeto a partir de un string

Pero al menos la segunda se puede corregir con Closures(Clausuras)y se convierten en métodos...y también es muy claro que si es una clase debe estar disponible globalmente o de lo contrarío que objetivo tiene crear clases? sería simples métodos? Por tanto el que sea global en este caso es un objetivo fundamental.

var auForm ={
Init:function(parametros1){},
Read:function(parametros1){},
write:function(parametros1){}
}

Un aporte:
//Caseros: Si vas a implementar clases dinámicamente, es bueno tener en cuenta como heredar métodos de otras. Y así incrementas su potencial!

Y continuamos sin usar eval() jeje, ganado en memoria y en velocidad de procesamiento.
  #13 (permalink)  
Antiguo 24/02/2009, 04:19
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Instanciar un objeto a partir de un string

jseros, de acuerdo contigo en que eval no es una buena solución. Pero el problema realmente no es ese. El problema es que la pregunta original de Caseros es "Sin saber por qué o para qué quiero hacer esto, quiero hacer exactamente instanciar un objeto a partir de su nombre contenido en una cadena".

Sabiendo qué es lo que quiere, por qué y para qué, se pueden proponer muchas soluciones alternativas, pero sin saberlo, no hay otra que usar eval.
  #14 (permalink)  
Antiguo 22/03/2010, 13:47
Den
 
Fecha de Ingreso: febrero-2007
Mensajes: 6
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Instanciar un objeto a partir de un string

¿Alguien sabe como se podría hacer esto mismo pero en vez de en javascript en J2EE?
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 07:14.