ugrás a tartalomhoz

Js setInterval és változók/metódusok elérése

breakline · 2007. Május. 1. (K), 17.58
Sziasztok


Felmerült bennem egy kérdés változók hatáskörével kapcsolatban, most próbálkozom javascriptben oop-vel, kb. a legegyszerűbb kódban is elakadod ha ezt csinálom:
  1. function myObj() {  
  2.     var sign = 0;  
  3.     this.setup = function() {  
  4.         setInterval(this.process,2000);  
  5.     }  
  6.     this.process = function() {  
  7.         alert(this.sign) //undefined  
  8.     }  
  9. }  
(a meghívást nem írtam ide)

Nyilván a setInterval-al van a gond, ilyenkor azért nem megy a "this" mert a vezérlés a globális futási környezetben van? Tehát a process() mint sima függvény hívódik meg, nem mint a myObj egyik metódusa? Vagy rossz így az egész?


kösz
üdv
BL
 
1

burkolófüggvénnyel ?

toxin · 2007. Május. 1. (K), 21.54
  1. function myObj() {  
  2.     this.sign = 0;  
  3.     this.setup = function() {  
  4.         setInterval(function(func,object){   
  5.          return function() { func.call(object) }  
  6.         }(this.process,this),2000);  
  7.     }  
  8.     this.process = function() {  
  9.         alert(this.sign)  
  10.     }  
  11. }  
ill. a prototype bind-ja is eszembe jutott :)

üdv t
2

én így csinálnám

zzrek · 2007. Május. 2. (Sze), 13.28
Láttam egy trükköt valahol, azóta használom néha, én így csinálnám:
  1. function myObj2() {  
  2.     this.sign = 0;  
  3.     var me=this;  
  4.     this.setup = function()  
  5.     {  
  6.         setInterval(me.process,2000);  
  7.     }  
  8.     this.process=function()  
  9.     {  
  10.         alert(me.sign++);  
  11.     }  
  12. }  
Toxin, ebben a burkolófüggvényes cuccban mi az a "...}(this.process,this),2000)..." rész? Valahol már láttam ilyet (de már nem emlékszem hol), hol lehet olvasni róla?
3

re

toxin · 2007. Május. 2. (Sze), 15.08
un. mint
  1. function(a,b){alert(a+b);}('hello'+' word')  
csak helyben meghívtam a külső függvényt, elkaptam az execution context-et majd visszadtam a burkoló függvényben, nemtudom hol lehet olvasni most tanulom én is ezeket a JavaScript: The Definitive Guide, 5th Edition-ból , és próbáltam alkalmazni a megszerzett tudást :)

üdv t

ui: a te megoldásoddal mi történik ha subclass-t akarsz létrehozni belőle, kb itt áll meg most a tudásom, de érdekel :))
4

köszönöm

breakline · 2007. Május. 3. (Cs), 10.54
én meg eltüntem, kösz a megoldásokat, ezt a "me" dolgot még seholsem láttam, de rám is rámfér a "Definite Guide" valahol meg is van..:)
5

Fel sem vetődik a kérdésed...

Balogh Tibor · 2007. Május. 4. (P), 09.31
Fel sem vetődik a kérdésed, ha elolvastad volna épp a témanyitásod előtti napon megjelent cikket: http://weblabor.hu/cikkek/oojsafelszinfolott :)

Sajnos a következő megoldás valamiért nem működőképes:
  1. this.setup = function() {  
  2.    setInterval.call(thisthis.process, 2000);  
  3. }  
6

valóban

breakline · 2007. Május. 4. (P), 13.01
igen, ez egy nagyon jó kis cikk lett, mikor nyitottam még nem vettem észre valszeg azért, mert a fórumok külön bookmarkolva vannak, de most hogy már elolvastam, csak annyit hogy kb. ilyen cikkeket szeretnék a weblaboron a jövőben is. :)
7

A cikknél!

Balogh Tibor · 2007. Május. 5. (Szo), 10.23
A "fenyegetéseket" a cikknél légy szíves! :)
További cikkek írásához a bátorítás nem csak nekem jön jól!