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? > > Darren > > > I 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); // == null But 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 this delete 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]