Foros del Web » Programando para Internet » Javascript »

Funciones dentro de funciones

Estas en el tema de Funciones dentro de funciones en el foro de Javascript en Foros del Web. Buenas a todos, Llevo un tiempo programando con Javascript. El caso es que cada dia las funciones se van convirtiendo en mas complejas. Ahora tengo ...
  #1 (permalink)  
Antiguo 21/06/2013, 21:41
Avatar de 0123  
Fecha de Ingreso: noviembre-2012
Ubicación: Entre la consola, el coda y un poco de photoshop
Mensajes: 263
Antigüedad: 11 años, 5 meses
Puntos: 10
Sonrisa Funciones dentro de funciones

Buenas a todos,

Llevo un tiempo programando con Javascript. El caso es que cada dia las funciones se van convirtiendo en mas complejas. Ahora tengo este problema:

Quiero que cuando se ejecute una funcion el resto de funciones que se llamen desde esa funcion tengan las mismas variables con las que trabajar. El problema es que no les puedo enviar los parametros a cada funcion. Es decir quiero:

Código Javascript:
Ver original
  1. function primero(objeto)
  2. {
  3. //el objeto tiene un id="superman"
  4. //creo una variable (la que quiero que obtenga la funcion segundo):
  5. miobjeto=objeto;
  6. //llamo a la funcion segundo, pero sin enviar parametro (no es mi funcion y no puedo modificarla):
  7.  
  8. segundo();
  9.  
  10. }
  11.  
  12. function segundo()
  13. {
  14. //alert que diga "superman"
  15. alert(miobjeto.id)
  16. }


No se como se llama lo que busco. Basicamente lo que quiero es que las funciones usen las mismas varialbes. No quiero usar variables globales, ya que son funciones con AJAX que pueden tardar mas de la cuenta y se pueden superponer.

¿Como puedo crear un entorno en el que las funciones tengan acceso a unas determinadas varialbes como si fuesen globales pero que no lo son?.

Siento preguntar de forma tan rara, pero es que no se que terminos usar.
  #2 (permalink)  
Antiguo 21/06/2013, 23:18
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 15 años, 9 meses
Puntos: 103
Respuesta: Funciones dentro de funciones

Bueno, lo que buscas es basicamente, es javascript orientado a objetos.
para lograrlo se puede hacer añadiendo "prototipos" a una clase que creamos, y inicializar objetos de estas clases.

algo asi

Código Javascript:
Ver original
  1. var primero = function(objeto)
  2. {
  3. this.miobjeto = objeto || {}; // asignamos el objeto al this, en caso de no ser definido, que sea {}
  4. this.segundo(); // llamamos a la funcion segundo, de esta clase ( se resuelve al prototipo )
  5. }
  6.  
  7. primero.prototype.segundo = function() // asignamos la funcion segundo
  8. {
  9. alert(this.miobjeto.id)
  10. }
  11.  
  12. var superman = new primero({id:'Superman Yeahhh'}); // fijate que dice new, significa que creamos una nueva instancia de la clase
  13.  
  14. var juancito = new primero(); // nos tira undefined
  15.  
  16. var rogelio = new primero({id:'Rogelio funes mori re del futbol mundial'});

y asi es como se crean clases, y se le agregan metodos, y se crean instancias de las mismas
__________________
Hangouts de JavaScript todos los jueves 20hs GMT, Unite !
https://plus.google.com/u/0/108504944676960830886
  #3 (permalink)  
Antiguo 22/06/2013, 02:03
Avatar de 0123  
Fecha de Ingreso: noviembre-2012
Ubicación: Entre la consola, el coda y un poco de photoshop
Mensajes: 263
Antigüedad: 11 años, 5 meses
Puntos: 10
Respuesta: Funciones dentro de funciones

Buenas chwc,

Muchas gracias por la explicación, voy hacer pruebas a ver que tal lo llevo... por que me suena a chino... jeje.

Que bien!
  #4 (permalink)  
Antiguo 22/06/2013, 07:35
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: Funciones dentro de funciones

buenas...
la forma que ofrece @chwc es una alternativa pero no necesariamente tiene que hacerse mediante objetos. también puede hacerse mediante funciones locales. tu problema en particular es de scope de variables. consiste en definir la función dentro de otra función para que esa función interna tenga alcance —o visibilidad— a la función externa. sin embargo, no puedes hacerlo al revés. es decir, la función externa no puede accesar al scope de las funciones internas.

Código:
function foo(bar){
// los argumentos definidos son variables locales a esa función ;
	function baz(){
	console.log(bar); // variable de la función externa ;
	}

baz(); // en algún punto de foo se invoca la función interna ;
}
para más detalles puedes buscar por javascript scope chain.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 22/06/2013, 09:10
Avatar de 0123  
Fecha de Ingreso: noviembre-2012
Ubicación: Entre la consola, el coda y un poco de photoshop
Mensajes: 263
Antigüedad: 11 años, 5 meses
Puntos: 10
Respuesta: Funciones dentro de funciones

Buenas zerokilled,

Uf uf... esa manera tuya es mucho mucho mas sencilla. Jeje... me quedo con tu forma. La verdad es que me cuesta mucho de aprender lo de los prototipos. Tras mas de cinco años programando, que se no es mucho, pero tampoco son dos días. Veo que hay limitaciones en los cerebros de algunos programadores, como el mio.

Lo que son las clases se me atragantan a lo bruto... :P. Es una pena... por que parece que todo lo bueno se hace con clases. :P.

Muchas gracias!!!!

La de trabajo que me voy a quitar. Actualmente tengo varias funciones que siempre se pasan un ID, id que pertenece a un array global con todo variables. Una locura.

:D

Matematicas, Euskera, Ingles, Latin... menuda basura de asignaturas que me daban en el colegio... Programación y tira millas.

Etiquetas: ajax, funcion, funciones
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 09:13.