Article View: chile.comp.programacion
Article #7Re: Javascript: setTimeout() dentro de un objeto
From: Marious
Date: Wed, 05 Aug 2009 00:48
Date: Wed, 05 Aug 2009 00:48
91 lines
4599 bytes
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
Technical Details
Message-ID:
<h5akva$k5e$1@news.nivel5.cl>Path:
arc1-ca.pugleaf.net!g2news2.google.com!news1.google.com!news.glorb.com!news.kjsl.com!news.nivel5.cl!not-for-mailReferences:
<h5a9b5$is5$1@news.nivel5.cl> <Xns9C5DC2A5539ADjmsnews@200.54.144.211>Show Full Headers
Complete Article Headers
X-Google-Thread: 337cc1efe9,6a8c59e449cbbab X-Google-Attributes: gid337cc1efe9,public,usenet X-Google-NewGroupId: yes X-Google-Language: SPANISH,UTF8 Path: arc1-ca.pugleaf.net!g2news2.google.com!news1.google.com!news.glorb.com!news.kjsl.com!news.nivel5.cl!not-for-mail From: Marious <sinspam@tampocoexiste.ivn.cl> Newsgroups: chile.comp.programacion,chile.comp.internet,chile.comp.www Subject: Re: Javascript: setTimeout() dentro de un objeto Date: Tue, 04 Aug 2009 20:48:55 -0400 Organization: Varios Lines: 91 Message-ID: <h5akva$k5e$1@news.nivel5.cl> References: <h5a9b5$is5$1@news.nivel5.cl> <Xns9C5DC2A5539ADjmsnews@200.54.144.211> NNTP-Posting-Host: 190.162.114.173 Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Trace: news.nivel5.cl 1249433386 20654 190.162.114.173 (5 Aug 2009 00:49:46 GMT) X-Complaints-To: news@news.nivel5.cl NNTP-Posting-Date: Wed, 5 Aug 2009 00:49:46 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1b3pre) Gecko/20090513 Fedora/3.0-2.3.beta2.fc11 In-Reply-To: <Xns9C5DC2A5539ADjmsnews@200.54.144.211>