2009-09-12 8 views
1

En ce moment, ce codeDans AS3, comment définir un objet passé en paramètre de fonction à null?

var gridArray:Array = [[],[],[],[],[],[]]; 
gridArray[0][0] = new gridProperties; 
//gridProperties has gridX and gridY i.e. gridArray[0][0].gridX 

function clearGridSquare(gridSquare:gridProperties):void 
{ 
gridSquare = null; 
} 

function test():void 
{ 
clearGridSquare(gridArray[0][0]); 
trace (gridArray[0][0]); 
} 

produit

[object gridProperties] 

au lieu de null. Je comprends que depuis un objet est une référence, même si techniquement il est passé comme une valeur à la fonction, il agit comme il est passé comme référence. De cette façon, je peux modifier dis, les propriétés gridX ou gridY de l'objet original à partir de la fonction (gridSquare.gridX = 1), mais je ne peux pas réellement rendre l'objet lui-même nul. J'ai trouvé que je peux le faire nulle si je le fais dans la fonction à la place:

gridArray[gridSquare.gridY][gridSquare.gridX] = null; 

mais qui semble comme je sens vraiment mauvais et rond-point de le faire. Y a-t-il une solution plus élégante?

Répondre

2

Vous ne pouvez pas rendre l'objet nul car "gridSquare" fait référence à "gridArray [0] [0]". Ainsi, en définissant "gridSquare", vous définissez simplement la référence locale aux données "gridArray [0] [0]" à NULL et non les données réelles à NULL. Je voudrais plutôt que votre fonction prenne les premier et deuxième index dans le tableau que vous souhaitez annuler. Ensuite, dans la fonction que vous pouvez faire ...

gridArray[i][j] = null 
+0

Alternativement, vous pouvez stocker les valeurs i et j dans les gridProperties objet afin que clearGridSquare, vous pouvez appeler: gridArray [gridSquare.i] [gridSquare.j] = null; – thehiatus

Questions connexes