---------- Forwarded message ----------
From: Alastair Leith <[email protected]>
Date: 12 April 2010 01:06
Subject: Re: Javascript issue modifying a structure (again… :/)
To: Christopher Wright <[email protected]>


Yes that helps heaps. Thanks cwright. I kind of twigged to the referencing
thing a few weeks back but didn't really extrapolate the general rule (I was
getting some strange results!) and still not 100% sure I have yet. So…

Does the function you wrote also assign individual item references back to
the original structure? If they are *values* and not *references* put into *
newObj*, is that distinction because of the call to another function or just
the iterating through at the lowest child level of the structure? If items
had sub-items would I need to iterate though sub-items (in more function
calls ? regressive function calls are out in JS aren't they?)?

So many questions! I'm really grateful for your help already though, thanks
again.

Alastair

I guess the downside of a loosely typed language like JS when your trying to
teach yourself scripting (that's me btw ;) ) is that things can get a little
slippery and not generate meaningful error mesages...

On 12 April 2010 00:49, Christopher Wright <[email protected]> wrote:

>  If anybody could identify my misconception here I be very grateful:
>>
>
>
> You're assuming that you can modify inputs -- you can't.
>
> You're assuming that JS copies by value -- it doesn't (it copies by
> reference).
>
> So, when you assign glyph to an input:   glyph = glyphs[cursor];     glyph
> is a reference to the input -- trying to modify that will fail.
>
> You need a copy function, as follows:
>
> function copy(obj)
> {
>        var newObj = new Object();
>        for(var e in obj)
>                newObj[e] = obj[e];
>        return newObj;
>
> }
>
> cursor = 5;
> function (__structure Glyphs_Out, __boolean Same, __string Font,
> __structure Glyph)
>        main (__structure Glyphs_In)
> {
>        var result = new Object();
>        var glyph = new Object();
>        var glyphs = new Array();
>        var font = new String();
>        font = "LucidaGrande";
>        if (!_testMode)
>        {
>                glyphs = Glyphs_In;
>                glyph = copy(glyphs[cursor]);
>
>
> //              This line works:
>                font = glyph.Font_Name;
>                glyph.Font_Name = font;
>                glyph.Y +=0.1;
>                // Can't modify inputs, so you'll have to copy some other
> inputs too.
>                //glyphs[cursor]["Y"] +=0.1;
>
>
>                result.Font = font;
>                result.Glyph = glyph;
>                result.Glyphs_Out = glyphs;
>                return result
>        }
> }
>
> Hope that helps! :)
>
> --
> [ christopher wright ]
> [email protected]
> http://kineme.net/
>
> --
> [ christopher wright ]
> [email protected]
> http://kineme.net/
>
>
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Quartzcomposer-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/quartzcomposer-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to