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:

function myObj() {
	var sign = 0;
	this.setup = function() {
		setInterval(this.process,2000);
	}
	this.process = function() {
		alert(this.sign) //undefined
	}
}
(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

function myObj() {
    this.sign = 0;
    this.setup = function() {
        setInterval(function(func,object){ 
       	 return function() { func.call(object) }
        }(this.process,this),2000);
    }
    this.process = function() {
        alert(this.sign)
    }
}
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:


function myObj2() {
    this.sign = 0;
    var me=this;
    this.setup = function()
    {
        setInterval(me.process,2000);
    }
    this.process=function()
    {
        alert(me.sign++);
    }
}

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
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:

   this.setup = function() {
      setInterval.call(this, this.process, 2000);
   }
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!