Volledige versie bekijken : Kijk of object ook daadwerkelijk juiste object is
dARgONa
%Europe/Berlin %686 %2008, 17:28
Ik wil graag controleren of een object een bepaald object is. hiervoor gebruik ik.
trace(arrowTemp + "==" + arrowUpObject);
if(arrowTemp == arrowUpObject)
{
trace("whoopie****ingdoo");
}
Nu geeft dit als output
[object arrowUp]==[object arrowUp]
maar het geeft niet mijn trace weer die in de if zit, waar maak ik hier een denkfout?
B-Mantis
%Europe/Berlin %698 %2008, 17:45
== vergelijkt de referenties. Hij kijkt niet of beiden objecten gelijk zijn, hij kijkt of beide verwijzingen naar hetzelfde object verwijzen. Dat is dus blijkbaar niet zo. Als je wil kijken of de 2 objecten identiek zijn, zul je een functie moeten schrijven die ze property voor property vergelijkt.
Omdat a == b een boolean waarde voorsteld, kun je ook dit doen:
trace(objectA == objectB);
je krijgt dan true of false te zien in de output.
dARgONa
%Europe/Berlin %700 %2008, 17:49
arrowUpObject= new arrowUp();
arrowTemp= new arrowUp();
Zoals hierboven staat worden ze aangemaakt, nu wil ik controleren of hij de juiste arrow bevat. Want er kan in de arrowTemp dus ook een arrowDown of iets anders inzitten.
Hoe zou ik dit dan het beste kunnen aanpakken?
Jan
%Europe/Berlin %726 %2008, 18:26
Misschien via:
trace(getQualifiedClassName(arrowUpObject));
trace(getQualifiedClassName(arrowTemp));
trace(getQualifiedClassName(arrowUpObject) == getQualifiedClassName(arrowTemp));
if(getQualifiedClassName(arrowUpObject) == getQualifiedClassName(arrowTemp))
{
trace("whoopie****ingdoo");
}
Groeten,
http://users.telenet.be/jansurf/cwo.pngJan
Dauntless
%Europe/Berlin %737 %2008, 18:41
Of
var type:Class = ArrowUp;
var instance:ArrowUp = new ArrowUp();
if(instance is type) trace("Yahoo");
Aangezien je waarschijnlijk toch in een if/elseif structuur kijkt, kan je met hardcoded classes werken.
dARgONa
%Europe/Berlin %754 %2008, 19:06
Dauntless bedankt voor de oplossing.
theFlashWizard
%Europe/Berlin %822 %2008, 20:43
Misschien interesant. Als je objecten op inhoud wilt vergelijken kun je het beste toString's schrijven en die gaan vergelijken. Ik heb dit laatst kunnen automatiseren door de describeType method.
Ik heb daarvoor een basis class voor VO's (Value Object) geschreven. Dat is zijn objecten met als enigste functie data opslaan.
Een toString functie wordt automatisch aangeroepen als een object "in text" / als string wordt gebruikt. Deze functie maakt dan de vertaalslag. Dit is ook zeer handig voor debuggen want met het volgende kun je dan de hele inhoud al uitlezen.
trace(vosubclass);
Soms wil je een gewoon object hebben omdat je daar doorheen kan loopen via for loops. Dan is de toObject functie erg handig.
De VO basis class
package nl.flashclub.util.data.vo
{
import flash.utils.describeType;
import nl.flashclub.util.data.IComparable;
/**
* @author Peter
*/
public class VO implements IComparable
{
public function equals(obj:IComparable):Boolean
{
if(obj == null) return false;
return (this.toString() == obj.toString());
}
public function toString():String
{
// Long mode:
var description:XML = describeType(this);
var qualifiedClassName:String = description.@name;
var className:String = qualifiedClassName.split("::")[1];
var propNames:XMLList = description.variable.@name;
var defString:String = "["+className;
for each(var propName:String in propNames)
{
defString += " "+propName+"='"+this[propName]+"'";
}
defString += "]";
return defString;
}
/*
* Creates an Object with all the info from the vo and returns it.
*/
public function toObject():Object
{
var description:XML = describeType(this);
var propNames:XMLList = description.variable.@name;
var obj:Object = new Object();
for each(var propName:String in propNames)
{
obj[propName] = this[propName];
}
return obj;
}
}
}
Dit is de IComparible interface:
package nl.flashclub.util.data
{
/**
* @author Peter
*/
public interface IComparable
{
function toString():String;
function equals(obj:IComparable):Boolean
}
}
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.