Rare fout met vars in een object

Status
Niet open voor verdere reacties.

NielsDesmet

Gebruiker
Lid geworden
19 mei 2008
Berichten
301
Ik heb een raar foutje mijn Javascript ontdekt, ik zal het even uitleggen met een voorbeeld...

Code:
function LOOL()
{
 var Foo;
 var Bar = 2;
 
 function ROFL()
 {
	Foo = Bar;
 }
 
 this.ROFL = ROFL;
}

Haha = new LOOL();
Haha.ROFL();
alert(Haha.Foo);
Hier wordt Foo correct de waarde 2 gegeven (ik heb het nagekeken met een alert in ROFL)

MAAR

Code:
function LOOL()
{
 this.Foo;
 this.Bar = 2;
 
 function ROFL()
 {
	Foo = Bar; // Op deze lijn zegt HTML-Kit "Bar is niet gedefinieerd"
 }
 
 this.ROFL = ROFL;
}

Haha = new LOOL();
Haha.ROFL();
alert(Haha.Foo);
(Zie het commentaarlijntje in de 2de code)

Mijn vraag is, hoe komt dit en waarom?
 
Volgens mij komt dit doordat je een var in javascript initialiseert door er dan wel gelijk een waarde aan mee te geven, dan wel door var ervoor te zetten.

Pin me hier niet op vast, aangezien ik nog niet zo heel veel met javascript heb gedaan.

Tevens, zou ik niet weten waarom je een var zo zou willen initialiseren :>
 
Heh, omdat als je het initialiseert of de "var" manier, dan kunnen de dingen buiten een LOOL-object het niet lezen, en dat is wel nodig =S
 
'Tis niet raar hoor. Je moet 2x 'this' gebruiken. Zoiets:
PHP:
//js

bbq = function() //of: "function bbq()", maargoed.
{
   this.saz = "test";
   this.foo;

   this.party = function()
   {
      this.foo = this.saz;
   }
}


//calling:

braadmeister = new bbq();

braadmeister.party();

alert(braadmeister.foo); //geeft dan dus 'test'
 
Laatst bewerkt:
Heh, omdat als je het initialiseert of de "var" manier, dan kunnen de dingen buiten een LOOL-object het niet lezen, en dat is wel nodig =S

Dan initialiseer je hem toch buiten je LOOL-object en ken je hem een waarde toe binnen je LOOL-object, voor zover ik weet doe je dat bij andere talen ook zo :rolleyes:
 
Tja maar als er meedere LOOL objecten gemaakt worden, delen ze wel elkaars vars, en dat is niet echt de bedoeling :p
 
Tja maar als er meedere LOOL objecten gemaakt worden, delen ze wel elkaars vars, en dat is niet echt de bedoeling :p

Dan maak je hem alsnog in je LOOL object aan en dan maak je een getter aan voor je variabele (Ik weet eigenlijk niet eens of dit zo kan binnen javascript, mijn kennis is vrij beperkt :p)
 
err, check mijn vorige bericht dus. Also: een getter is een beetje een omweg... :p
 
err, check mijn vorige bericht dus. Also: een getter is een beetje een omweg... :p

Ag, ik ben geen held in JavaScript dus ik kijk er gewoon met een java blik naar :p (en daar wil je wel met getters werken, anders krijg je beetje vieze code :) )
 
Dat je HTML-kit dat aangeeft is volkomen terecht
Code:
function LOOL()
{
 // public variable definitie
 this.Foo;
// public variable definitie
 this.Bar = 2;

 
// private function definitie
 function ROFL()
 {
       // scope assignment 
       // deze vars kunnen dus alleen als var Foo, Bar gedefinieerd zijn in
       // ROFL functie of LOOL functie of in de global scope
	Foo = Bar; // Op deze lijn zegt HTML-Kit "Bar is niet gedefinieerd"

       // zoals eerder vermeld de juiste manier is :
       // this.Foo = this.Bar;
       
 }
 // maak ROFL pulbic
 this.ROFL = ROFL;
}

Haha = new LOOL();
Haha.ROFL();
alert(Haha.Foo);
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan