Josh
 
Okay, so here's what I did... var person : Person = new Person(); person.wakeup 
= new Date();person.breakfast = new Date();person.lunch = new 
Date();person.dinner = null;person.bedtime = null; var wfArr : Array = new 
Array(); timeArr[0] = "wakeup";timeArr[1] = "breakfast";timeArr[2] = 
"lunch";timeArr[3] = "dinner";timeArr[4] = "bedtime"; var event : int;if (some 
criteria)      {  event = 2;  } if (some criteria)     {  
person[timeArr[event]] = null;  }and it works... person.lunch... aka 
person["lunch"]... was set to null... thanks, you rock!! Darren



To: [EMAIL PROTECTED]: [EMAIL PROTECTED]: Thu, 17 Jul 2008 12:18:35 
+1000Subject: Re: [flexcoders] Array reference vs values




On Thu, Jul 17, 2008 at 11:55 AM, Darren Houle <[EMAIL PROTECTED]> wrote:

Josh Yes, what you're describing is exactly what I described and is, in fact, 
what it happening... but to say I don't ever need to do this?  Well... yes... I 
need to do this... and it has nothing to do with the garbage collector. Here, 
let me explain in another way.... I have a custom object... lets say it's a 
Person object.  It has various properties, but several are Date types.  These 
are all consecutive, like a workflow, and I want to be able to address them in 
order via an array... like this... var person : Person = new Person(); 
person.wakeup = new Date();person.breakfast = new Date();person.lunch = new 
Date();person.dinner = null;person.bedtime = null; var timeArr : Array = new 
Array(); timeArr[0] = person.wakeup;timeArr[1] = person.breakfast;timeArr[2] = 
person.lunch;timeArr[3] = person.dinner;timeArr[4] = person.bedtime;  Then some 
other code figures out where we are in the flow of the day's events... var 
status : int;if (some criteria)      {  event = 2;  } But I determine lunch 
hasn't actually happened yet, so it shouldn't have a Date yet.  I need to blank 
out this value that was previously set in the Person object... if (some 
criteria)     {  timeArr[event] = null;  } But since these references don't 
seem to propogate backwards, nulling one of the array elements doesn't affect 
the original property.  That's the *whole purpose* of reference vs value... a 
reference is a pointer to memory space... so if I null that memory space it 
should affect all the vars pointing to that memory space. Does that make more 
sense?DarrenI think so. But you're definitely going about it the wrong way - 
hear me out:In ECMAScript, you can access any public field by indexing its name 
as a string. Now assuming person has these fields, and you want to be able to 
access them (and mess with them) in order. There's a few ways to do this:const 
fieldOrder : Array =   [    'wakeup',    'breakfast',    'lunch',    'dinner',  
  'bedtime',  ];Then you can do this:trace(myPerson.lunch); // == 
date.toString()myPerson[fieldOrder[2]] = null;trace(myPerson.lunch); // == 
nullBut while you can mute that instance of date, you can't delete it. It 
defeats the purpose of garbage collection (and probably makes it a lot harder 
to implement).If say, myPerson is *dynamic* either by the dynamic keyword on 
the class definition, or because it's created with "{}" instead of "new 
ClassName()", you can also do thisdelete 
myPerson[fieldOrder[2]];trace(myPerson.lunch); // === undefined, or an 
exception is thrown depending on various conditions of myPerson :)This will 
completely remove the "lunch" field from the myPerson instance, but the Date 
instance itself will still be sitting around waiting for garbage 
collection.-Josh-- "Therefore, send not to know For whom the bell tolls. It 
tolls for thee.":: Josh 'G-Funk' McDonald:: 0437 221 380 :: [EMAIL PROTECTED]  

Reply via email to