Foros del Web » Programando para Internet » Javascript »

¿Como definir propiedades privadas y métodos privados bajo notación literal?

Estas en el tema de ¿Como definir propiedades privadas y métodos privados bajo notación literal? en el foro de Javascript en Foros del Web. Con notación "constructor": @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original var Constructor = function ( ) {     //properties     this . public_prop ...
  #1 (permalink)  
Antiguo 13/09/2012, 00:02
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 15 años, 6 meses
Puntos: 269
¿Como definir propiedades privadas y métodos privados bajo notación literal?

Con notación "constructor":
Código Javascript:
Ver original
  1. var Constructor = function(){
  2.     //properties
  3.     this.public_prop = "publico";
  4.     var private_prop = "privado";
  5.     //methods
  6.     var private_meth = function(){
  7.         return private_prop;        
  8.     };
  9.     this.public_meth = function(){
  10.         return this.public_prop + private_prop;        
  11.     };
  12. };
  13.  
  14. var objeto = new Constructor();
  15.  
  16. console.log(objeto.public_prop);   //"publico"
  17. console.log(objeto.public_meth()); //"publicoprivado"
  18. console.log(objeto.private_prop);  //undefined
  19. console.log(objeto.private_meth());//Uncaught TypeError: Object [object Object] has no method 'private_meth' ​

Pero notación literal?
Código Javascript:
Ver original
  1. var plainObject = {
  2.     //... ¿como hago acá? ¿se puede?
  3. };
  #2 (permalink)  
Antiguo 13/09/2012, 05:25
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años, 7 meses
Puntos: 343
Respuesta: ¿Como definir propiedades privadas y métodos privados bajo notación litera

No se puede.

En tu primer snippet las propiedades 'privadas' son simples variables capturadas por los closures que crean tus métodos 'privileged' (en este caso public_meth).

Como observación adicional, te comento que ese tipo de metodos privadas son más costosos en términos de memoria ya que se crean en cada instancia, en lugar de referirse a una única fuente como puede ser el prototype.
__________________
blog | @aijoona
  #3 (permalink)  
Antiguo 13/09/2012, 07:20
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 15 años, 6 meses
Puntos: 269
Respuesta: ¿Como definir propiedades privadas y métodos privados bajo notación litera

Muchisimas gracias Aijoona

¿te refieres a usar el prototipo para crear propiedades y métodos privados?
¿me podrías dar un ejemplo?
Gracias.
  #4 (permalink)  
Antiguo 13/09/2012, 07:26
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años, 7 meses
Puntos: 343
Respuesta: ¿Como definir propiedades privadas y métodos privados bajo notación litera

Usando la herencia clásica de JS no vas a poder implementar properties privadas sin inyectarlas en un closure (como haces en el ejemplo).

A lo que hacia referencia, es que cuando usas este tipo de construcciones (la del ejemplo que das), la instanciación/creación de objetos no reutiliza las funciones, con su consecuente costo en memoria.

Código Javascript:
Ver original
  1. var A = function() {};
  2.  
  3. A.prototype.foo = function() {};
  4.  
  5. var a1 = new A;
  6. var a2 = new A;
  7.  
  8. a2.foo === a2.foo; // true
  9.  
  10. var B = function() { this.foo = function() {} };
  11.  
  12. var b1 = new B;
  13. var b2 = new B;
  14.  
  15. b1.foo === b2.foo; // false

Por lo demás, en lo personal me conformo con la privacidad por convención en ausencia de la privacidad por implementación.
__________________
blog | @aijoona
  #5 (permalink)  
Antiguo 13/09/2012, 08:24
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 15 años, 6 meses
Puntos: 269
Respuesta: ¿Como definir propiedades privadas y métodos privados bajo notación litera

Ah, está. Me queda claro.
Por si a alguien más le sirve, este artículo me fue útil.

Saludos.

Etiquetas: constructor, literal, metodos, poo, privado, propiedades
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 19:51.