[javascript] functie kan geen objecten opvragen

Pagina: 1
Acties:

  • Plankje
  • Registratie: November 2002
  • Laatst online: 14-09-2023
Ik heb de volgende code geschreven (is wel vereenvoudigd)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  function movePic ()
  {
    this.loop = false;

    this.initialize = function () 
    {
      this.loop = true;
      document.onmousemove=this.doMove;
    }

    this.doMove = function ()
    {
      window.status = this.loop;
    }
    this.stop = function ()
    {
      this.loop = false;
    }
  }

Het probleem is als volgt: na de document.onmousemove wordt de functie this.doMove opgeroepen, maar de functie this.doMove kan op haar beurt geen andere elementen van het object waarin het bevindt opvragen. In dit voorbeeld is dat this.loop. Als ik dat doe dan retourneert mijn browser undefined.

Dat is natuurlijk niet de bedoeling, dus mijn vraag is nu: hoe kan ik, als ik met document.onmousemove een functie oproep, in diezelfde functie toch andere elementen uit het object kan opvragen?

Ik heb me ondertussen suf gezocht in pagina's over object-georienteerd javascript, maar een dergelijke (wellicht unieke) situatie wordt nergens behandeld. Dus misschien dat hier iemand is die hier een oplossing voor weet?

[edit]Ik heb bij zowel FF 1.5 als IE 6.0 dit probleem

  • Victor
  • Registratie: November 2003
  • Niet online
Plankje schreef op zaterdag 28 oktober 2006 @ 15:11:
Ik heb de volgende code geschreven (is wel vereenvoudigd)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  function movePic ()
  {
    this.loop = false;

    this.initialize = function () 
    {
      this.loop = true;
      document.onmousemove=this.doMove;
    }

    this.doMove = function ()
    {
      window.status = this.loop;
    }
    this.stop = function ()
    {
      this.loop = false;
    }
  }

Het probleem is als volgt: na de document.onmousemove wordt de functie this.doMove opgeroepen, maar de functie this.doMove kan op haar beurt geen andere elementen van het object waarin het bevindt opvragen. In dit voorbeeld is dat this.loop. Als ik dat doe dan retourneert mijn browser undefined.

Dat is natuurlijk niet de bedoeling, dus mijn vraag is nu: hoe kan ik, als ik met document.onmousemove een functie oproep, in diezelfde functie toch andere elementen uit het object kan opvragen?

Ik heb me ondertussen suf gezocht in pagina's over object-georienteerd javascript, maar een dergelijke (wellicht unieke) situatie wordt nergens behandeld. Dus misschien dat hier iemand is die hier een oplossing voor weet?

[edit]Ik heb bij zowel FF 1.5 als IE 6.0 dit probleem
Je krijgt een undefined melding omdat this.loop helemaal niet bekend is binnen de context van doMove op het moment dat deze aan document.onmousemove gekoppeld is. this zal in dit geval namelijk naar het window object verwijzen.

Definieer binnen movePic een variabele genaamd self en geef deze als waarde this:
JavaScript:
1
var self = this;


Om nu vanuit doMove naar loop te verwijzen gebruik je self.loop.

  • Plankje
  • Registratie: November 2002
  • Laatst online: 14-09-2023
King_Louie schreef op zaterdag 28 oktober 2006 @ 15:18:
[...]

Je krijgt een undefined melding omdat this.loop helemaal niet bekend is binnen de context van doMove op het moment dat deze aan document.onmousemove gekoppeld is. this zal in dit geval namelijk naar het window object verwijzen.

Definieer binnen movePic een variabele genaamd self en geef deze als waarde this:
JavaScript:
1
var self = this;


Om nu vanuit doMove naar loop te verwijzen gebruik je self.loop.
pff hoe makkelijk de oplossing kan zijn _/-\o_. Bedank... dit werkt idd :)