Ik heb enkele objecten gemaakt volgens dit principe: http://www.wait-till-i.co...l-something-to-the-world/
Ik heb te maken met vreemde bugs, en nader onderzoek wijst uit dat dit bij de variabelen zit.
De output is alg volgt:
100
testvar=100 this.testvar=100
testvar=100 this.testvar=12
12
Er zijn dus twee versies van testvar en dat vind ik vreemd.
Want this.testvar verwijst toch naar de in het begin gedeclareerde testvar? Dit levert uiteraard vreemde bugs op als je het niet door hebt.
Maar hoe krijg ik in dit object slechts 1 versie van testvar?
EDIT: Ik heb al een oplossing gevonden.
De 'var varvar=100' er uithalen, en bij de return 'testvar:testvar' vervangen door 'testvar:100'.
Dat werkt. Het script gaat een foutmelding geven omdat je 'testvar' probeert te lezen die niet meer bestaat. Vergissingen worden daardoor niet meer gemaakt, en de foutmeldingen zorgen ervoor dat je alles netjes via this.testvar gaat doen. Maar is dit goed? Ik vind het zo'n vreemde constructie om via die dubbele punt naar een constante te verwijzen?
Ik heb te maken met vreemde bugs, en nader onderzoek wijst uit dat dit bij de variabelen zit.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| <html><body><script> var testding = function(){ var testvar=100; function set() { this.testvar=12; } function test() { alert('testvar=' + testvar + ' this.testvar=' + this.testvar); } // reveal all things private by assigning public pointers return { test:test, set:set, testvar:testvar } }(); alert(testding.testvar); testding.test(); testding.set(); testding.test(); alert(testding.testvar); </script></body></html> |
De output is alg volgt:
100
testvar=100 this.testvar=100
testvar=100 this.testvar=12
12
Er zijn dus twee versies van testvar en dat vind ik vreemd.
Want this.testvar verwijst toch naar de in het begin gedeclareerde testvar? Dit levert uiteraard vreemde bugs op als je het niet door hebt.
Maar hoe krijg ik in dit object slechts 1 versie van testvar?
EDIT: Ik heb al een oplossing gevonden.
De 'var varvar=100' er uithalen, en bij de return 'testvar:testvar' vervangen door 'testvar:100'.
Dat werkt. Het script gaat een foutmelding geven omdat je 'testvar' probeert te lezen die niet meer bestaat. Vergissingen worden daardoor niet meer gemaakt, en de foutmeldingen zorgen ervoor dat je alles netjes via this.testvar gaat doen. Maar is dit goed? Ik vind het zo'n vreemde constructie om via die dubbele punt naar een constante te verwijzen?
[ Voor 18% gewijzigd door SvMp op 28-01-2010 12:11 ]