ik ben dus object georienteerd bezig in JScript (serverside). Ik hang objecten aan elkaar via parent/child en broer/zus relaties en loop ze uiteindelijk recursief door om een boompje te maken (danwel HTML, danwel XML)
twee functes van belang:
createObject maakt dus een object aan en appendChild hangt een object aan het huidige, deze functies worden vaak genest aangeroepen,
alles werkt gewoon zoals ik verwacht, als ik herhaaldelijk een object toevoeg aan m'n myHTML.body object gaat alles goed, maarrrrr als ik dat in een for loopje doet gaat het fout, dan kloppen die pointerlinks intern niet meer (dat maak ik op uit het feit dat m'n loopje langs de objecten alleen het eerste (das ook vaag, ik zou het laatste verwachten) object van die loop retourneert)
dit werkt dus wel:
en dit niet:
dit is dus erg vaag en ik krijg de indruk dat binnen die forloop de tempObj variabele (uit createObject) als globaal gezien wordt ofzo
wat er dus voor zorgt dat er wat pointers scheef staan, maar dan nog zou ik het laatste object terugverwachten uit m'n treeloopje en niet het eerste
nog even de functie om de objecttree terug te geven (hoewel ik niet denk dat daar iets fout zit:
twee functes van belang:
PHP:
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
29
30
31
| function createObject(obj) { evalStr = 'var tempObj = new '+obj+'(' for (i=1;i<arguments.length;i++) { if (i != 1) {evalStr += ','} evalStr += '\''+arguments[i]+'\''; } evalStr += ');'; if (regObjects[obj]) { eval(evalStr); return(tempObj); } else { Response.Write('[layout verneukende errortext'); Response.End(); } } TNode.prototype.appendChild = function(obj) { if (!this.firstChild) { obj.parentNode = this; this.firstChild = obj; this.lastChild = obj; this.childNodes[this.childNodes.length] = obj; } else { obj.parentNode = this; obj.previousSibling = this.lastChild; this.lastChild.nextSibling = obj; this.lastChild = obj; this.childNodes[this.childNodes.length] = obj; } return(obj) } |
createObject maakt dus een object aan en appendChild hangt een object aan het huidige, deze functies worden vaak genest aangeroepen,
alles werkt gewoon zoals ik verwacht, als ik herhaaldelijk een object toevoeg aan m'n myHTML.body object gaat alles goed, maarrrrr als ik dat in een for loopje doet gaat het fout, dan kloppen die pointerlinks intern niet meer (dat maak ik op uit het feit dat m'n loopje langs de objecten alleen het eerste (das ook vaag, ik zou het laatste verwachten) object van die loop retourneert)
dit werkt dus wel:
PHP:
1
2
3
| myHTML.body.appendChild(createObject('TTextField','een textveldje0')); myHTML.body.appendChild(createObject('TTextField','een textveldje1')); myHTML.body.appendChild(createObject('TTextField','een textveldje2')); |
en dit niet:
PHP:
1
2
3
| for (i=0; i<3; i++) { myHTML.body.appendChild(createObject('TTextField','een textveldje'+i)); } |
dit is dus erg vaag en ik krijg de indruk dat binnen die forloop de tempObj variabele (uit createObject) als globaal gezien wordt ofzo
nog even de functie om de objecttree terug te geven (hoewel ik niet denk dat daar iets fout zit:
PHP:
1
2
3
4
5
6
7
8
9
10
| TNode.prototype.getTree = function() { tree = ''; var tempNode = this; tree += '<div class="neptuneTree">\n'; tree += tempNode.type+'<br />\n'; if (tempNode.firstChild) tree += tempNode.firstChild.getTree(); tree += '</div>\n'; if (tempNode.nextSibling) tree += tempNode.nextSibling.getTree(); return(tree); } |
[ Voor 20% gewijzigd door Verwijderd op 09-02-2003 15:40 . Reden: brute layout verneuking opgelost ]