In PHP maak ik nog wel eens een collectie-klasse die om bepaalde data ergens vandaan te vissen. Die klasse bevat dan een array met alle objecten / arrays waar de klasse een collectie van is. Om ze eruit te vissen gebruik ik een functie a la de volgende:
Hiermee kun je in de weergave van de data heel makkelijk door je collectie heenwandelen door een while($foo = $coll->fetchFoo()) loopje te gebruiken.
Nu zou ik graag in javascript hetzelfde voor elkaar krijgen. Waar ik tegenaan loop is dat javascript geen static variabelen kent. Om dezelfde constructie te kunnen gebruiken "moet" ik een property ge-/misbruiken:
De vraag is dus of iemand hier een charmantere oplossing voor heeft.
PHP:
1
2
3
4
5
6
7
| function fetchFoo() { static $i = 0; if (isset($this->foos[$i])) { return $this->foos[$i++]; } return ($i = 0); } |
Hiermee kun je in de weergave van de data heel makkelijk door je collectie heenwandelen door een while($foo = $coll->fetchFoo()) loopje te gebruiken.
Nu zou ik graag in javascript hetzelfde voor elkaar krijgen. Waar ik tegenaan loop is dat javascript geen static variabelen kent. Om dezelfde constructie te kunnen gebruiken "moet" ik een property ge-/misbruiken:
JavaScript:
Die oplossing vind ik niet zo mooi omdat a) de klasse verder weinig van doen heeft met de iterator, en b) het nogal een zooitje wordt als je meerdere itererende functies krijgt. Moet je dan maar this.j tot en met this.p gaan aanmaken?1
2
3
4
5
6
| coll.prototype.fetchFoo = function { if (this.foos.length > this.i) { return this.foos[this.i++]; } return (this.i = 0); } |
De vraag is dus of iemand hier een charmantere oplossing voor heeft.
Regeren is vooruitschuiven