Foros del Web » Programando para Internet » Javascript »

Javascript : Encapsulamiento

Estas en el tema de Javascript : Encapsulamiento en el foro de Javascript en Foros del Web. Saludos, Les presento mi problema o mas bien duda: Estoy realizando algunas funciones en javascript y tengo la duda si se pueden proteger, esto es ...
  #1 (permalink)  
Antiguo 24/09/2010, 08:51
Avatar de bitbow  
Fecha de Ingreso: julio-2006
Ubicación: Distrito Federal
Mensajes: 635
Antigüedad: 17 años, 10 meses
Puntos: 34
Sonrisa Javascript : Encapsulamiento

Saludos,

Les presento mi problema o mas bien duda:

Estoy realizando algunas funciones en javascript y tengo la duda si se pueden proteger, esto es para que el usuario no pueda ver los datos que se envian, o el nombre d ela funcion, solo es una duda pero si alguien sabe como protegerlas se los agradeceria.
__________________
El ego es el mayor enemigo de un hombre inteligente.
  #2 (permalink)  
Antiguo 24/09/2010, 09:13
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 11 meses
Puntos: 310
Respuesta: Javascript : Encapsulamiento

No, puedes hacer un script para desactivar el clic derecho para que los usuarios normales no sepan cómo ver el código fuente, pero es lo máximo que puedes hacer. A no ser que lo hagas con PHP, que supongo que se podría hacer algo así como echo '<script type="text/javascript" ...' , entonces en teoría no saldría.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #3 (permalink)  
Antiguo 24/09/2010, 09:27
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: Javascript : Encapsulamiento

@_cronos2,
no creo que el tema va por proteccion u ocultacion del codigo fuente, se trata de encapsulamiento u ocultacion de datos dentro del mismo lenguaje.

@bitbow,
en javascript, el encapsulamiento se logra con la creacion de closures. http://www.crockford.com/javascript/private.html
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #4 (permalink)  
Antiguo 24/09/2010, 09:35
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 11 meses
Puntos: 310
Respuesta: Javascript : Encapsulamiento

Ah, entendí mal.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #5 (permalink)  
Antiguo 24/09/2010, 12:29
Avatar de bitbow  
Fecha de Ingreso: julio-2006
Ubicación: Distrito Federal
Mensajes: 635
Antigüedad: 17 años, 10 meses
Puntos: 34
Respuesta: Javascript : Encapsulamiento

Muchas gracias a todos por la ayuda, sobre todo por la rapidez, no me habia tocado preguntar mucho, pero ahora me veo en la necesidad.
__________________
El ego es el mayor enemigo de un hombre inteligente.
  #6 (permalink)  
Antiguo 24/09/2010, 14:15
 
Fecha de Ingreso: octubre-2003
Ubicación: lima
Mensajes: 57
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Javascript : Encapsulamiento

Cita:
Iniciado por zerokilled Ver Mensaje
@_cronos2,
no creo que el tema va por proteccion u ocultacion del codigo fuente, se trata de encapsulamiento u ocultacion de datos dentro del mismo lenguaje.

@bitbow,
en javascript, el encapsulamiento se logra con la creacion de closures. [url]http://www.crockford.com/javascript/private.html[/url]
Lo que has puesto es muy nuevo para mi ... pero muy muy nuevo ... y muy avanzado ... jajaja... casi como todo javajjjjaajajajajaj........
eso seria como poner un archi.js ... ?¿
__________________
GUMER FERNANDEZ HUATUCO
--------------------------------------
Solo hay un dio$
  #7 (permalink)  
Antiguo 24/09/2010, 14:49
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Javascript : Encapsulamiento

Hola

A ver si este otro te aclara algo mas

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #8 (permalink)  
Antiguo 24/09/2010, 15:53
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 11 meses
Puntos: 310
Respuesta: Javascript : Encapsulamiento

Bueno, acabo de leer el link de @Adler y me he enterado un poco más de lo que decía por eso del idioma, pero he llegado a un punto que se me han juntado todas las ideas y me he perdido, y ahora ya no entiendo nada xD. En la página, pone este ejemplo:
Código Javascript:
Ver original
  1. function crearContador() {
  2.  var c = 0;
  3.  function f() {
  4.   c = c + 1;
  5.   return c;
  6.  }
  7. return f;
  8. }
  9. var contador1 = crearContador();
  10. alert(contador1()); // 1
  11. alert(contador1()); // 2
  12. alert(contador1()); // 3
Entiendo que el primero sea 1, ¿pero por qué a partir de ahí va sumando? Al principio de la función pone c = 0, ¿entonces es porque ponen contador1() en vez de crearContador()?
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #9 (permalink)  
Antiguo 24/09/2010, 16:02
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: Javascript : Encapsulamiento

es correcto. fijate que contador1 es la funcion f que esta dentro de crearContador.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #10 (permalink)  
Antiguo 24/09/2010, 16:31
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Javascript : Encapsulamiento

Hola

Para crearContador, var c es local pero para f es global. Lo que está ocurriendo es mas o menos esto. Llamamos a crearContador, en ese momento c es igual a 0, empieza la función f, a c le sumamos 1 y lo devolvemos con lo que c ya no es 0 sino 1, después devolvemos f que es el alert
Es un proceso parecido a este
Cita:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript">
var c = 0;
</script>
</head>
<body>
<input type="button" value="sumar" onclick="c=c+1" />
<input type="button" value="ver valor" onclick="alert(c);" />
</body>
</html>
Corrígeme @ZK si me equivoco
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #11 (permalink)  
Antiguo 24/09/2010, 16:43
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: Javascript : Encapsulamiento

Cita:
Para crearContador, var c es local pero para f es global.
no, la funcion f tambien es local del scope de la funcion que le contiene, en este caso de crearContador. si fuera global, no tendria sentido devolver la funcion al final de crearContador. intenta invocar f en el ambito global y veras que la consola reporta error de undefined.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #12 (permalink)  
Antiguo 24/09/2010, 16:47
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 11 meses
Puntos: 310
Respuesta: Javascript : Encapsulamiento

Vale, creo que ya lo voy entendiendo. Pero entonces, si por ejemplo hiciera:
Código Javascript:
Ver original
  1. alert(contador1()); // 1
  2. alert(crearContador()); // 1?
  3. alert(contador1()); // 2?
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #13 (permalink)  
Antiguo 24/09/2010, 17:04
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: Javascript : Encapsulamiento

¡vamos _cronos2! analizalo. fijate que es lo que devuelve crearContador cuando es invocado. por tanto, ¿que tu crees que imprime la segunda linea? sin embargo, entiendo tu duda. los closures no afectan a los demas, por lo tanto se crea uno nuevo.
Código:
var a = crearContador();
alert(a()); // 0;
b = crearContador();
alert(b()); // 0;
alert(a()); // 1;
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #14 (permalink)  
Antiguo 24/09/2010, 17:11
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Javascript : Encapsulamiento

Cita:
Iniciado por zerokilled Ver Mensaje
no, la funcion f tambien es local del scope de la funcion que le contiene, en este caso de crearContador. si fuera global, no tendria sentido devolver la funcion al final de crearContador. intenta invocar f en el ambito global y veras que la consola reporta error de undefined.
Entiendo lo que dices, pero me refería a que c es global para f con lo cual se va reescribiendo una y otra vez ¿no es correcto?
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #15 (permalink)  
Antiguo 24/09/2010, 17:17
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: Javascript : Encapsulamiento

se podria entender mas o menos de esa forma, ya que las funciones definidas dentro de otras tienen acceso a las variables de los scopes ancestros.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #16 (permalink)  
Antiguo 24/09/2010, 17:39
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 11 meses
Puntos: 310
Respuesta: Javascript : Encapsulamiento

Vale, tuve que hacer yo mismo las pruebas para entenderlo, y seguramente no habré entendido ni la mitad, pero espero que algo se me haya quedado. Ahora la pregunta que se me formula es, ¿para qué puede servir esto? Por ejemplo, ¿para qué podría necesitar bitbow un closure?
Saludos :D
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #17 (permalink)  
Antiguo 24/09/2010, 18:51
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: Javascript : Encapsulamiento

posiblemente para evitar que el usuario modifique los valores. en este enlace tienes tres ejemplos de la utilidad de closures, http://jibbering.com/faq/notes/closures/#clClDo. no estoy seguro si tambien se usa mucho en las librerias al inicializarlas, supongo que para lo mismo, proteger ciertos valores. esa es la idea de encapsulamiento, que los valores solo sean visible y/o editables mediante una interfaz en lugar de que el usuario pueda modificarla directamente.

para hacerte una idea del cual imagino que estas familiarizado. un contador regresivo el cual al final te muestra otro contenido. algo parecido a los servidores donde compartes archivos -megaupload, rapidshare y similares-. u otro ejemplo con el mismo concepto, un quiz o examen online por tiempo, cuando el tiempo expira no te permita seguir contestando las preguntas.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #18 (permalink)  
Antiguo 25/09/2010, 05:25
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Javascript : Encapsulamiento

Pero ojo, toda la literatura que he leído aconseja utilizarlo con moderación, ya que al parecer hasta la versión 6 de IE, que es probablemente cuando se escribieron estos artículos, no logra liberar la memoria con lo cual se satura ¿continuará pasando en las versiones 8 y 9?
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #19 (permalink)  
Antiguo 25/09/2010, 10:28
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: Javascript : Encapsulamiento

esto es lo que dice un articulo de msdn.
Cita:
As described in detail in Understanding and Solving Internet Explorer Leak Patterns, the JScript garbage collector in previous versions of Internet Explorer manages the lifetime of JScript objects but not of DOM objects. As a result, the JScript garbage collector cannot break circular references between DOM objects and JScript objects, and memory leaks occur. In Microsoft Internet Explorer 6, these circular references are broken when the Internet Explorer process terminates. In Internet Explorer 7, these circular references are broken when users navigate away from the page that contains the leaks.

In Internet Explorer 8, the JScript garbage collector treats DOM objects referenced by JScript objects as JScript objects. Rather than wait until page navigation as in Internet Explorer 7 or process termination as in Internet Explorer 6, the garbage collector manages the lifetime of these DOM objects and breaks circular references whenever possible throughout the lifetime of the site.

Although Web developers should be aware of memory leaks created by use of programming patterns such as JScript closures in Internet Explorer 7 and earlier, those patterns no longer result in leaks in Internet Explorer 8.
http://msdn.microsoft.com/en-us/libr...42(VS.85).aspx

yo opino hay que tomarselo con cautela porque no me extrañaria que fuera motivo de pura publicidad.

nota: con esto no quiero decir que si podemos confiar en el uso de los closures, uselo con moderacion.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #20 (permalink)  
Antiguo 25/09/2010, 12:47
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Javascript : Encapsulamiento

Cita:
Iniciado por zerokilled Ver Mensaje
yo opino hay que tomarselo con cautela porque no me extrañaria que fuera motivo de pura publicidad.

nota: con esto no quiero decir que si podemos confiar en el uso de los closures, uselo con moderacion.
Cuando he acabado de leerlo, he pensado en eso mismo. Vete tú a saber
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />

Etiquetas: encapsulamiento
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 20:39.