Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Es verdad que no puedo crear un objeto dentro de un método de otro objeto?

Estas en el tema de Es verdad que no puedo crear un objeto dentro de un método de otro objeto? en el foro de Javascript en Foros del Web. Buenas caballeros, de POO en JS siguen mis dudas. Estoy intentando hacer lo siguiente, necesito crear un objeto según convenga o no, por ello hago ...
  #1 (permalink)  
Antiguo 21/05/2013, 17:27
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Pregunta Es verdad que no puedo crear un objeto dentro de un método de otro objeto?

Buenas caballeros, de POO en JS siguen mis dudas.


Estoy intentando hacer lo siguiente, necesito crear un objeto según convenga o no, por ello hago la instancia dentro de un metodo de otro objeto, pero no se llega a crear el objeto :

Código Javascript:
Ver original
  1. function PrototipoUno(){
  2.  
  3.   this.CreateObject = function(){
  4.    
  5.    var ObjetoPrueva = new PrototipoDos();
  6.  
  7.   }
  8. }
  9.  
  10. function PrototipoDos(){
  11.  
  12.  this.existo = true;
  13.  
  14. }


Si ejecútalos este simple código, veremos que en la consola ni siquiera existe el objetoPrueva, es decir, no se ha creado el objeto ¿por que? ¿que limitaciones tienen este tipo de código?
  #2 (permalink)  
Antiguo 21/05/2013, 17:37
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 15 años, 8 meses
Puntos: 103
Respuesta: Es verdad que no puedo crear un objeto dentro de un método de otro objeto?

Mira, tu codigo funciona bien, lo que pasa es que no lo ves, ya que los metodos y variables de un objeto, pueden ser publicos o privados.
con var, declaras a un objeto como privado.
y con this, como publico
prueba con lo siguiente, y veras
Código Javascript:
Ver original
  1. function PrototipoUno(){
  2.   this.CreateObject = function(){
  3.    this.ObjetoPrueva = new PrototipoDos();
  4.   }
  5. }
  6.  
  7. function PrototipoDos(){
  8.  this.existo = true;
  9. }

no tengo mucho tiempo para explicar, pero si declaras el prototipo dentro del constructor ( procura declararlo una sola vez ) este puede acceder a tus datos privados, de otra forma no puede acceder
__________________
Hangouts de JavaScript todos los jueves 20hs GMT, Unite !
https://plus.google.com/u/0/108504944676960830886
  #3 (permalink)  
Antiguo 21/05/2013, 18:17
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Respuesta: Es verdad que no puedo crear un objeto dentro de un método de otro objeto?

Oks, pero una pregunta, si uso this. no pasa a ser el objeto ..., una propiedad del objeto del método donde lo creo? wtf valla lio me armo xD
  #4 (permalink)  
Antiguo 21/05/2013, 18:29
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Respuesta: Es verdad que no puedo crear un objeto dentro de un método de otro objeto?

En efecto, lo he probado, el objeto pasa a ser un objeto del objeto de la clase uno, es decir, seria así :

ObjetoClaseUno.ObjetoPrueva;


Pero, me refiero a si es posible crear un objeto desde un método de otro objeto, y que este objeto sea totalmente independiente.
  #5 (permalink)  
Antiguo 21/05/2013, 19:14
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 15 años, 8 meses
Puntos: 103
Respuesta: Es verdad que no puedo crear un objeto dentro de un método de otro objeto?

Albuss, quiero que te des una idea de como funciona interiormente.
Existen estos tipos de variables en JavaScript

string, number(enteros y flotantes ), function y object

la parte de las variables de function no conozco mucho, asi que no las voy a tomar.

pero por ejemplo si haces esto
Código Javascript:
Ver original
  1. var usuario = {'nombre':'Albuss'}
  2. var b = usuario
  3. b.nombre = 'Brian'
  4.  
  5. alert(usuario.nombre); // retorna Brian

Ahora, que es lo que paso, b no tendria que ser independiente de usuario ? es decir, b no tendria que ser un objeto nuevo ?
no, ya que las variables usuario y b son punteros, los cuales apuntan a una direccion de memoria, donde se encuentra el objeto.

todas las listas , objetos y objetos obtenidos de clases, son del tipo object. es decir que solo se encuentran mediante punteros

esto no pasa con las cadenas o los numeros, ya que no contienen punteros, sino el valor en si, asi que no ocurriria lo mismo que los objetos.

llendo a tu caso, yo podria hacer lo siguiente
Código Javascript:
Ver original
  1. function PrototipoUno(){
  2.   this.CreateObject = function(){
  3.    this.ObjetoPrueva = new PrototipoDos();
  4.   }
  5. }
  6.  
  7. function PrototipoDos(){
  8.  this.existo = true;
  9. }
  10.  
  11. var prototipo = new PrototipoUno();
  12. prototipo.CreateObject()
  13.  
  14.  
  15. var a = prototipo.ObjetoPrueva;
  16. var b = prototipo.ObjetoPrueva;
  17. var c = prototipo.ObjetoPrueva;
  18. var d = prototipo.ObjetoPrueva;
  19. d.existo = false;
  20.  
  21. prototipo.ObjetoPrueva.existo // false

es decir, ahí estoy creando punteros, pero no estoy copiando al objeto

un saludo
__________________
Hangouts de JavaScript todos los jueves 20hs GMT, Unite !
https://plus.google.com/u/0/108504944676960830886
  #6 (permalink)  
Antiguo 21/05/2013, 19:21
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 15 años, 8 meses
Puntos: 103
Respuesta: Es verdad que no puedo crear un objeto dentro de un método de otro objeto?

Cita:
Pero, me refiero a si es posible crear un objeto desde un método de otro objeto, y que este objeto sea totalmente independiente.
me falto responderte, y si es posible imaginate esto
Código Javascript:
Ver original
  1. var prototipos2 = []
  2. function PrototipoUno(nombre){
  3.  
  4.   prototipo2.push(new PrototipoDos())
  5.  
  6. }
  7.  
  8. function PrototipoDos(){
  9.  this.existo = true;
  10. }
  11.  
  12. var prototipo = new PrototipoUno();
  13. alert(prototipos2[0]);

otra cosa, tienes escaip ??
__________________
Hangouts de JavaScript todos los jueves 20hs GMT, Unite !
https://plus.google.com/u/0/108504944676960830886
  #7 (permalink)  
Antiguo 21/05/2013, 19:40
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Respuesta: Es verdad que no puedo crear un objeto dentro de un método de otro objeto?

Pedazo explicación, si señor, así da gusto aprender.

Etiquetas: metodo, objeto
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:44.