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]