🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: chile.comp.programacion
8 messages
8 total messages Started by Marious Tue, 04 Aug 2009 21:30
Javascript: setTimeout() dentro de un objeto
#2
Author: Marious
Date: Tue, 04 Aug 2009 21:30
46 lines
2430 bytes
Tengo un objeto con dos funciones, una que crea un div, y
otra que le aumenta el alto de 5 en 5 hasta llegar a 20
(osea 4 veces).-

objeto =
	{
	sumar: 5,
	pasos: 4,
	crearDiv: function()
		{
		this.elDiv = document.createElement('div');
		// aquí se pone cualquier codigo para
		// darle estilos y añadirlo a algún otro elemento
		},
	agrandarDiv: function()
		{
		if (!this.tamanno) this.tamanno = 0;
		this.pasos   -= 4;
		this.tamanno += this.sumar;
		this.elDiv.style.height = this.tamanno+'px';
		if (this.pasos != 0) setTimeout(this.agrandarDiv,100);
		// Ahí está el drama ↑
		}
	}

Si llamo a la función de agrandarDiv inmediatamente, funciona a la
perfección... no así con un “setTimeout”.

Necesito usar setTimeout porque quiero una demora de 100ms entre cada
suma para que así se vea aparecer el div.

El problema es que al hacer un setTimeout, la función no se llamará
en el mismo contexto, sino fuera, y “this” perderá su valor original...
osea, la referencia al objeto de la función.

Lo que busco, es una solución para poder realizarlo,
pero con las siguientes reglas.

No utilizar el nombre estatico del objeto.
No utilizar ID para referirse al div.
No registrar una variable global que haga referencia al objeto.
Que me permita cambiar el nombre del objeto y no haya que
tocar el codigo de este.

A ver si a alguien se le ocurre y me puede ayudar...
Thx~
Re: Javascript: setTimeout() dentro de un objeto
#3
Author: Benjamin Porter
Date: Tue, 04 Aug 2009 21:34
58 lines
2814 bytes
"Marious" <sinspam@tampocoexiste.ivn.cl> escribi� en el mensaje 
news:h5a9b5$is5$1@news.nivel5.cl...
> Tengo un objeto con dos funciones, una que crea un div, y
> otra que le aumenta el alto de 5 en 5 hasta llegar a 20
> (osea 4 veces).-
>
> objeto =
> {
> sumar: 5,
> pasos: 4,
> crearDiv: function()
> {
> this.elDiv = document.createElement('div');
> // aqu� se pone cualquier codigo para
> // darle estilos y a�adirlo a alg�n otro elemento
> },
> agrandarDiv: function()
> {
> if (!this.tamanno) this.tamanno = 0;
> this.pasos   -= 4;
> this.tamanno += this.sumar;
> this.elDiv.style.height = this.tamanno+'px';
> if (this.pasos != 0) setTimeout(this.agrandarDiv,100);
> // Ah� est� el drama ?
> }
> }
>
> Si llamo a la funci�n de agrandarDiv inmediatamente, funciona a la
> perfecci�n... no as� con un "setTimeout".
>
> Necesito usar setTimeout porque quiero una demora de 100ms entre cada
> suma para que as� se vea aparecer el div.
>
> El problema es que al hacer un setTimeout, la funci�n no se llamar�
> en el mismo contexto, sino fuera, y "this" perder� su valor original...
> osea, la referencia al objeto de la funci�n.
>
> Lo que busco, es una soluci�n para poder realizarlo,
> pero con las siguientes reglas.
>
> No utilizar el nombre estatico del objeto.
> No utilizar ID para referirse al div.
> No registrar una variable global que haga referencia al objeto.
> Que me permita cambiar el nombre del objeto y no haya que
> tocar el codigo de este.
>
> A ver si a alguien se le ocurre y me puede ayudar...
> Thx~


�window.setTimeout?


-- 
Salu2
_____________________
Benjamin Porter 
Re: Javascript: setTimeout() dentro de un objeto
#4
Author: Marious
Date: Tue, 04 Aug 2009 22:45
56 lines
2944 bytes
On 08/04/2009 05:34 PM, Benjamin Porter wrote:
> "Marious"<sinspam@tampocoexiste.ivn.cl>  escribió en el mensaje
> news:h5a9b5$is5$1@news.nivel5.cl...
>> Tengo un objeto con dos funciones, una que crea un div, y
>> otra que le aumenta el alto de 5 en 5 hasta llegar a 20
>> (osea 4 veces).-
>>
>> objeto =
>> {
>> sumar: 5,
>> pasos: 4,
>> crearDiv: function()
>> {
>> this.elDiv = document.createElement('div');
>> // aquí se pone cualquier codigo para
>> // darle estilos y añadirlo a algún otro elemento
>> },
>> agrandarDiv: function()
>> {
>> if (!this.tamanno) this.tamanno = 0;
>> this.pasos   -= 4;
>> this.tamanno += this.sumar;
>> this.elDiv.style.height = this.tamanno+'px';
>> if (this.pasos != 0) setTimeout(this.agrandarDiv,100);
>> // Ahí está el drama ?
>> }
>> }
>>
>> Si llamo a la función de agrandarDiv inmediatamente, funciona a la
>> perfección... no así con un "setTimeout".
>>
>> Necesito usar setTimeout porque quiero una demora de 100ms entre cada
>> suma para que así se vea aparecer el div.
>>
>> El problema es que al hacer un setTimeout, la función no se llamará
>> en el mismo contexto, sino fuera, y "this" perderá su valor original...
>> osea, la referencia al objeto de la función.
>>
>> Lo que busco, es una solución para poder realizarlo,
>> pero con las siguientes reglas.
>>
>> No utilizar el nombre estatico del objeto.
>> No utilizar ID para referirse al div.
>> No registrar una variable global que haga referencia al objeto.
>> Que me permita cambiar el nombre del objeto y no haya que
>> tocar el codigo de este.
>>
>> A ver si a alguien se le ocurre y me puede ayudar...
>> Thx~
>
>
> ¿window.setTimeout?
>
>

¿?
Re: Javascript: setTimeout() dentro de un objeto
#5
Author: Jos� Miguel Santib��ez
Date: Tue, 04 Aug 2009 23:08
83 lines
4061 bytes
En el cap�tulo anterior (news:h5a9b5$is5$1@news.nivel5.cl), Marious
<sinspam@tampocoexiste.ivn.cl> dijo: 

> Tengo un objeto con dos funciones, una que crea un div, y
> otra que le aumenta el alto de 5 en 5 hasta llegar a 20
> (osea 4 veces).-
> 
> objeto =
>      {
>      sumar: 5,
>      pasos: 4,
>      crearDiv: function()
>           {
>           this.elDiv = document.createElement('div');
>           // aquí se pone cualquier codigo para
>           // darle estilos y añadirlo a algún otro elemento
>           },
>      agrandarDiv: function()
>           {
>           if (!this.tamanno) this.tamanno = 0;
>           this.pasos   -= 4;
>           this.tamanno += this.sumar;
>           this.elDiv.style.height = this.tamanno+'px';
>           if (this.pasos != 0) setTimeout(this.agrandarDiv,100);
>           // Ahí está el drama ↑
>           }
>      }
> 
> Si llamo a la función de agrandarDiv inmediatamente, funciona a la
> perfección... no así con un “setTimeout”.
> 
> Necesito usar setTimeout porque quiero una demora de 100ms entre cada
> suma para que así se vea aparecer el div.
> 
> El problema es que al hacer un setTimeout, la función no se llamará
> en el mismo contexto, sino fuera, y “this” perderá su valor
> original... osea, la referencia al objeto de la función.
> 
> Lo que busco, es una solución para poder realizarlo,
> pero con las siguientes reglas.
> 
> No utilizar el nombre estatico del objeto.
> No utilizar ID para referirse al div.
> No registrar una variable global que haga referencia al objeto.
> Que me permita cambiar el nombre del objeto y no haya que
> tocar el codigo de este.
> 

A ver, no hay una soluci�n que responda bien a todos tus requerimientos. 
Simplemente, porque la funci�n SetTimeOut no es una funci�n "orientada a 
objetos".

Lo m�s cercano a lo que quieres, (y que se amarra de un peque�o resquicio 
legal que dejaste abiero) es utilizar una variable global, que sea un 
"arreglo" a los objetos. Algo as� como:
var misobjetos = new Array();
objeto =
     {
     sumar: 5,
     pasos: 4,
     crearDiv: function()
          {
          this.indice = misobjetos.length;
          misobjetos[this.indice] = this;
          this.elDiv = document.createElement('div');
          // aquí se pone cualquier codigo para
          // darle estilos y añadirlo a algún otro elemento
          },
     agrandarDiv: function()
          {
          if (!this.tamanno) this.tamanno = 0;
          this.pasos   -= 4;
          this.tamanno += this.sumar;
          this.elDiv.style.height = this.tamanno+'px';
          if (this.pasos != 0)
            setTimeout(misobjetos[this.indice].agrandarDiv, 100);
          }
     }

-- 
                           Jose M. Santiba�ez A.
                             <jms@nivel5.cl>
                           <http://caos.cl/jms>
Re: Javascript: setTimeout() dentro de un objeto
#6
Author: Benjamin Porter
Date: Tue, 04 Aug 2009 23:21
67 lines
3191 bytes
"Marious" <sinspam@tampocoexiste.ivn.cl> escribi� en el mensaje 
news:h5adna$jaa$1@news.nivel5.cl...
> On 08/04/2009 05:34 PM, Benjamin Porter wrote:
>> "Marious"<sinspam@tampocoexiste.ivn.cl>  escribi� en el mensaje
>> news:h5a9b5$is5$1@news.nivel5.cl...
>>> Tengo un objeto con dos funciones, una que crea un div, y
>>> otra que le aumenta el alto de 5 en 5 hasta llegar a 20
>>> (osea 4 veces).-
>>>
>>> objeto =
>>> {
>>> sumar: 5,
>>> pasos: 4,
>>> crearDiv: function()
>>> {
>>> this.elDiv = document.createElement('div');
>>> // aqu� se pone cualquier codigo para
>>> // darle estilos y a�adirlo a alg�n otro elemento
>>> },
>>> agrandarDiv: function()
>>> {
>>> if (!this.tamanno) this.tamanno = 0;
>>> this.pasos   -= 4;
>>> this.tamanno += this.sumar;
>>> this.elDiv.style.height = this.tamanno+'px';
>>> if (this.pasos != 0) setTimeout(this.agrandarDiv,100);
>>> // Ah� est� el drama ?
>>> }
>>> }
>>>
>>> Si llamo a la funci�n de agrandarDiv inmediatamente, funciona a la
>>> perfecci�n... no as� con un "setTimeout".
>>>
>>> Necesito usar setTimeout porque quiero una demora de 100ms entre cada
>>> suma para que as� se vea aparecer el div.
>>>
>>> El problema es que al hacer un setTimeout, la funci�n no se llamar�
>>> en el mismo contexto, sino fuera, y "this" perder� su valor original...
>>> osea, la referencia al objeto de la funci�n.
>>>
>>> Lo que busco, es una soluci�n para poder realizarlo,
>>> pero con las siguientes reglas.
>>>
>>> No utilizar el nombre estatico del objeto.
>>> No utilizar ID para referirse al div.
>>> No registrar una variable global que haga referencia al objeto.
>>> Que me permita cambiar el nombre del objeto y no haya que
>>> tocar el codigo de este.
>>>
>>> A ver si a alguien se le ocurre y me puede ayudar...
>>> Thx~
>>
>>
>> �window.setTimeout?
>>
>>
>
> �?

En vez de poner setTimeout solito, poner window.setTimeout...


-- 
Salu2
_____________________
Benjamin Porter 
Re: Javascript: setTimeout() dentro de un objeto
#7
Author: Marious
Date: Wed, 05 Aug 2009 00:48
91 lines
4599 bytes
On 08/04/2009 07:08 PM,  wrote:
> En el capítulo anterior (news:h5a9b5$is5$1@news.nivel5.cl), Marious
> <sinspam@tampocoexiste.ivn.cl>  dijo:
>
>> Tengo un objeto con dos funciones, una que crea un div, y
>> otra que le aumenta el alto de 5 en 5 hasta llegar a 20
>> (osea 4 veces).-
>>
>> objeto =
>>       {
>>       sumar: 5,
>>       pasos: 4,
>>       crearDiv: function()
>>            {
>>            this.elDiv = document.createElement('div');
>>            // aquí se pone cualquier codigo para
>>            // darle estilos y añadirlo a algún otro elemento
>>            },
>>       agrandarDiv: function()
>>            {
>>            if (!this.tamanno) this.tamanno = 0;
>>            this.pasos   -= 4;
>>            this.tamanno += this.sumar;
>>            this.elDiv.style.height = this.tamanno+'px';
>>            if (this.pasos != 0) setTimeout(this.agrandarDiv,100);
>>            // Ahí está el drama ↑
>>            }
>>       }
>>
>> Si llamo a la función de agrandarDiv inmediatamente, funciona a la
>> perfección... no así con un “setTimeout”.
>>
>> Necesito usar setTimeout porque quiero una demora de 100ms entre cada
>> suma para que así se vea aparecer el div.
>>
>> El problema es que al hacer un setTimeout, la función no se llamará
>> en el mismo contexto, sino fuera, y “this” perderá su valor
>> original... osea, la referencia al objeto de la función.
>>
>> Lo que busco, es una solución para poder realizarlo,
>> pero con las siguientes reglas.
>>
>> No utilizar el nombre estatico del objeto.
>> No utilizar ID para referirse al div.
>> No registrar una variable global que haga referencia al objeto.
>> Que me permita cambiar el nombre del objeto y no haya que
>> tocar el codigo de este.
>>
>
> A ver, no hay una solución que responda bien a todos tus requerimientos.
> Simplemente, porque la función SetTimeOut no es una función "orientada a
> objetos".
>
> Lo más cercano a lo que quieres, (y que se amarra de un pequeño resquicio
> legal que dejaste abiero) es utilizar una variable global, que sea un
> "arreglo" a los objetos. Algo así como:
> var misobjetos = new Array();
> objeto =
>       {
>       sumar: 5,
>       pasos: 4,
>       crearDiv: function()
>            {
>            this.indice = misobjetos.length;
>            misobjetos[this.indice] = this;
>            this.elDiv = document.createElement('div');
>            // aquí se pone cualquier codigo para
>            // darle estilos y añadirlo a algún otro elemento
>            },
>       agrandarDiv: function()
>            {
>            if (!this.tamanno) this.tamanno = 0;
>            this.pasos   -= 4;
>            this.tamanno += this.sumar;
>            this.elDiv.style.height = this.tamanno+'px';
>            if (this.pasos != 0)
>              setTimeout(misobjetos[this.indice].agrandarDiv, 100);
>            }
>       }
>

Sigue estando de cierta forma en contra de la tercera regla que puse. xD
He googleado hasta el cansancio y nadie lo ha hecho como quiero,
al parecer es como dices, simplemente el setTimeout no está hecho
para trabajar dentro de objetos.

De todas formas gracias a tu sugerencia... encontraré una forma de
manejar arreglos de objetos sin que choquen entre ellos. (no debe
ser complicado)

http://img88.imageshack.us/img88/6264/7a2e11yz.jpg
Re: Javascript: setTimeout() dentro de un objeto
#8
Author: Jos� Miguel Santib��ez
Date: Wed, 05 Aug 2009 14:31
102 lines
5241 bytes
En el cap�tulo anterior (news:h5akva$k5e$1@news.nivel5.cl), Marious
<sinspam@tampocoexiste.ivn.cl> dijo: 

> On 08/04/2009 07:08 PM,  wrote:
>> En el capítulo anterior (news:h5a9b5$is5$1@news.nivel5.cl), Marious
>> <sinspam@tampocoexiste.ivn.cl>  dijo:
>>
>>> Tengo un objeto con dos funciones, una que crea un div, y
>>> otra que le aumenta el alto de 5 en 5 hasta llegar a 20
>>> (osea 4 veces).-
>>>
>>> objeto =
>>>       {
>>>       sumar: 5,
>>>       pasos: 4,
>>>       crearDiv: function()
>>>            {
>>>            this.elDiv = document.createElement('div');
>>>            // aquí se pone cualquier codigo para
>>>            // darle estilos y añadirlo a algún otro elemento
>>>            },
>>>       agrandarDiv: function()
>>>            {
>>>            if (!this.tamanno) this.tamanno = 0;
>>>            this.pasos   -= 4;
>>>            this.tamanno += this.sumar;
>>>            this.elDiv.style.height = this.tamanno+'px';
>>>            if (this.pasos != 0) setTimeout(this.agrandarDiv,100);
>>>            // Ahí está el drama ↑
>>>            }
>>>       }
>>>
>>> Si llamo a la función de agrandarDiv inmediatamente, funciona a
>>> la perfección... no así con un “setTimeout”.
>>>
>>> Necesito usar setTimeout porque quiero una demora de 100ms entre
>>> cada suma para que así se vea aparecer el div.
>>>
>>> El problema es que al hacer un setTimeout, la función no se
>>> llamará en el mismo contexto, sino fuera, y “this”
>>> perderá su valor original... osea, la referencia al objeto de la
>>> función. 
>>>
>>> Lo que busco, es una solución para poder realizarlo,
>>> pero con las siguientes reglas.
>>>
>>> No utilizar el nombre estatico del objeto.
>>> No utilizar ID para referirse al div.
>>> No registrar una variable global que haga referencia al objeto.
>>> Que me permita cambiar el nombre del objeto y no haya que
>>> tocar el codigo de este.
>>>
>>
>> A ver, no hay una solución que responda bien a todos tus
>> requerimientos. Simplemente, porque la función SetTimeOut no es una
>> función "orientada a objetos".
>>
>> Lo más cercano a lo que quieres, (y que se amarra de un pequeño
>> resquicio legal que dejaste abiero) es utilizar una variable global,
>> que sea un "arreglo" a los objetos. Algo así como:
>> var misobjetos = new Array();
>> objeto =
>>       {
>>       sumar: 5,
>>       pasos: 4,
>>       crearDiv: function()
>>            {
>>            this.indice = misobjetos.length;
>>            misobjetos[this.indice] = this;
>>            this.elDiv = document.createElement('div');
>>            // aquí se pone cualquier codigo para
>>            // darle estilos y añadirlo a algún otro elemento
>>            },
>>       agrandarDiv: function()
>>            {
>>            if (!this.tamanno) this.tamanno = 0;
>>            this.pasos   -= 4;
>>            this.tamanno += this.sumar;
>>            this.elDiv.style.height = this.tamanno+'px';
>>            if (this.pasos != 0)
>>              setTimeout(misobjetos[this.indice].agrandarDiv, 100);
>>            }
>>       }
>>
> 
> Sigue estando de cierta forma en contra de la tercera regla que puse.
> xD He googleado hasta el cansancio y nadie lo ha hecho como quiero,
> al parecer es como dices, simplemente el setTimeout no está hecho
> para trabajar dentro de objetos.
> 
> De todas formas gracias a tu sugerencia... encontraré una forma de
> manejar arreglos de objetos sin que choquen entre ellos. (no debe
> ser complicado)
> 

ehh... me queda una soluci�n que cumple con todos tus requerimientos, 
pero que es absurda: simplemente esperar dentro de un ciclo...

-- 
                           Jose M. Santiba�ez A.
                             <jms@nivel5.cl>
                           <http://caos.cl/jms>
Re: Javascript: setTimeout() dentro de un objeto
#9
Author: Marious
Date: Wed, 05 Aug 2009 15:13
102 lines
5471 bytes
On 08/05/2009 10:31 AM,  wrote:
> En el capítulo anterior (news:h5akva$k5e$1@news.nivel5.cl), Marious
> <sinspam@tampocoexiste.ivn.cl>  dijo:
>
>> On 08/04/2009 07:08 PM,  wrote:
>>> En el capítulo anterior (news:h5a9b5$is5$1@news.nivel5.cl), Marious
>>> <sinspam@tampocoexiste.ivn.cl>   dijo:
>>>
>>>> Tengo un objeto con dos funciones, una que crea un div, y
>>>> otra que le aumenta el alto de 5 en 5 hasta llegar a 20
>>>> (osea 4 veces).-
>>>>
>>>> objeto =
>>>>        {
>>>>        sumar: 5,
>>>>        pasos: 4,
>>>>        crearDiv: function()
>>>>             {
>>>>             this.elDiv = document.createElement('div');
>>>>             // aquí se pone cualquier codigo para
>>>>             // darle estilos y añadirlo a algún otro elemento
>>>>             },
>>>>        agrandarDiv: function()
>>>>             {
>>>>             if (!this.tamanno) this.tamanno = 0;
>>>>             this.pasos   -= 4;
>>>>             this.tamanno += this.sumar;
>>>>             this.elDiv.style.height = this.tamanno+'px';
>>>>             if (this.pasos != 0) setTimeout(this.agrandarDiv,100);
>>>>             // Ahí está el drama ↑
>>>>             }
>>>>        }
>>>>
>>>> Si llamo a la función de agrandarDiv inmediatamente, funciona a
>>>> la perfección... no así con un “setTimeout”.
>>>>
>>>> Necesito usar setTimeout porque quiero una demora de 100ms entre
>>>> cada suma para que así se vea aparecer el div.
>>>>
>>>> El problema es que al hacer un setTimeout, la función no se
>>>> llamará en el mismo contexto, sino fuera, y “this”
>>>> perderá su valor original... osea, la referencia al objeto de la
>>>> función.
>>>>
>>>> Lo que busco, es una solución para poder realizarlo,
>>>> pero con las siguientes reglas.
>>>>
>>>> No utilizar el nombre estatico del objeto.
>>>> No utilizar ID para referirse al div.
>>>> No registrar una variable global que haga referencia al objeto.
>>>> Que me permita cambiar el nombre del objeto y no haya que
>>>> tocar el codigo de este.
>>>>
>>> A ver, no hay una solución que responda bien a todos tus
>>> requerimientos. Simplemente, porque la función SetTimeOut no es una
>>> función "orientada a objetos".
>>>
>>> Lo más cercano a lo que quieres, (y que se amarra de un pequeño
>>> resquicio legal que dejaste abiero) es utilizar una variable global,
>>> que sea un "arreglo" a los objetos. Algo así como:
>>> var misobjetos = new Array();
>>> objeto =
>>>        {
>>>        sumar: 5,
>>>        pasos: 4,
>>>        crearDiv: function()
>>>             {
>>>             this.indice = misobjetos.length;
>>>             misobjetos[this.indice] = this;
>>>             this.elDiv = document.createElement('div');
>>>             // aquí se pone cualquier codigo para
>>>             // darle estilos y añadirlo a algún otro elemento
>>>             },
>>>        agrandarDiv: function()
>>>             {
>>>             if (!this.tamanno) this.tamanno = 0;
>>>             this.pasos   -= 4;
>>>             this.tamanno += this.sumar;
>>>             this.elDiv.style.height = this.tamanno+'px';
>>>             if (this.pasos != 0)
>>>               setTimeout(misobjetos[this.indice].agrandarDiv, 100);
>>>             }
>>>        }
>>>
>> Sigue estando de cierta forma en contra de la tercera regla que puse.
>> xD He googleado hasta el cansancio y nadie lo ha hecho como quiero,
>> al parecer es como dices, simplemente el setTimeout no está hecho
>> para trabajar dentro de objetos.
>>
>> De todas formas gracias a tu sugerencia... encontraré una forma de
>> manejar arreglos de objetos sin que choquen entre ellos. (no debe
>> ser complicado)
>>
>
> ehh... me queda una solución que cumple con todos tus requerimientos,
> pero que es absurda: simplemente esperar dentro de un ciclo...
>

Esa dejaría pegado al navegador seguramente...
Ya dí con una buena.-
Simplemente menciono el nombre del objeto una vez más dentro de sus
variables, y lo paso a las funciones como argumento.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads