JS setTimeout() object-en belül
Sziasztok!
Szeretném, ha egy objektumom függvénye önmagát hívná meg bizonyos idő elteltével.
Első gondolatom ez volt:de ez ugye nem megy, mert a "this.ismetel()" -re nem hivatkozhatok a setTimeoutban megadott függvényben.
Még úgy sem megy hogy erre változtattam ezt a sort:Ezzel meg az a baj, hogy egyáltalán nem várja meg a 33 ms-t, hanem azonnal lefuttatja a this.ismetel() -t. Ha 5000 ms-t adok meg időzítésnek akkor is azonnal hívja meg.
Hogyan lehetne ezt megoldani?
Üdv: Elek
■ Szeretném, ha egy objektumom függvénye önmagát hívná meg bizonyos idő elteltével.
Első gondolatom ez volt:
Objektumom.valami.prototype = function (){
ismetel : function () {
blablablabla...
setTimeout( function () { this.ismetel(); }, 33 );
}
};
Még úgy sem megy hogy erre változtattam ezt a sort:
setTimeout( this.ismetel(), 33 );
Hogyan lehetne ezt megoldani?
Üdv: Elek
this.ismetel() Ez meghívja az
Ez meghívja az adott függvényt, és a visszatérési értékét adja át a setTimeout-nak.
Azaz?
Most így hirtelen nem jövök rá hogy mit akarsz ezzel mondani :/
A setTimeout első paraméterét
1, karakterláncként, ez a kevésbé szép megoldás:
setTimeout('fuggveny("parameter"); fuggveny2();', 33);
2, ún. callback-ként, amikor csak a függvény nevét kell beírni, a paraméterek az idő után következnek
setTimeout(fuggveny, 33, "parameter");
A második esetben látható, hogy csak egy függvényt vagy metódust lehet megadni.
A kettő között az a különbség, hogy amikor ezt írod be:
var valtozo = fuggveny;
akkor a változó értéke maga a függvény lesz, azaz meghívhatod a következőképpen:
valtozo();
Ha így hívod meg:
var valtozo = fuggveny();
akkor pedig a változó értéke a függvény visszatérési értéke lesz.
Amikor ezt írtad be:
setTimeout(this.fuggveny(), 33);
az ekvivalens a következővel:
setTimeout(valtozo, 33);
Egyébként neked szerintem a
setInterval()
-ra van szükséged.Binding
Mivel a
this
asetTimeout
-on belül a globális objektum, böngészőben awindow
lesz, így nehéz lesz meghívni az általad választott függvényt. Használhatsz.bind
-ot, vagy bevezetsz egy új változót, példáulthat
vagyself
, amit athis
értékével töltesz föl, majd használsz asetTimout
-on belül.Igen, én is így
Ne haragudj, de átgondoltad
Kipróbáltad egyáltalán?
Hogyan vennéd használatba a 'Objektumom' osztályt?
A "teljes" objektum így nézne
A $this mindig az objektum lesz. Nyilván lehetne más neve is, de nekem ez kényelmes.
A this pedig lehet a kiváltó elem (egy click eventnél).
Használni: Objektumom.csinald();
Látom, továbbra sem érted.
Jó, legyen. Mert az tény,
Nem hiába vagyok backendes, js-hez csak akkor nyúlok ha muszáj, bár ez már nem js alapjai szerintem, vagy valamikor nagyon feljebb emelkedhetett az a léc.
Egyébként akkor ők is rosszul csinálják?
http://s.szalas.hu/3356115309/uncooked/js/szallas_modal.js
vagy
http://s.szalas.hu/3356115309/uncooked/js/new_social.js
Nem véletlen a hasonlóság, innen tetszett meg az egész.
Először is olvasd el, amit a
window.setTimeout(function() {
_this.show();
}, options.interval);
}
Elég szerencsétlennek tartom ezt a lambdás szokást a JS körökben, nehezíti a kódolvasást, és ez hatványozottan jön elő a node.js kódokban.
Értem
Azt hittem magával az objektum kialakításával ($this és a csinald metódussal) van gondod, a setTimeOut-ra már nem is figyeltem, csak másolgattam.
Bocs :)
Én kérek bocsánatot, mert
Akkor jót beszélgettünk
Szeretem a pénteket, sosem unalmas.
Az adott objektumból egy vagy
Nem látom akadályát
Nem látom akadályát, hogy
Pedig pont te szabtál neki akadályt azzal, hogy egy megosztott változóban tárolod el a
this
értékét, amin minden egyes példány osztozik, és az utoljára létrehozott értékét fogja hordozni.A data módusult, erre a fenti
Chrome konzol:
Remélem most nem beszélek mellé.
$this
csinald
es azismetel
a$this
-re hivatkozik, ami meg van osztva. Azaz azok a hívások máshogy fognak működni.Ami példakódot írtál az
Csodálkoznék ha egyáltalán valami történne.
Így próbáld:
Köszönöm
Köszönöm mégegyszer!
blablabla
A "blablablabla..." nélkül is