"type" is used in Javascript, so consider it a reserved word.  I know you
can override some reserved words, but that's asking for trouble.

Also, you're treeinfo function is slightly wrong.  It is a member function
of a tree, but makes reference to an object it doesn't know about
(my_forest).
Replace "my_forest" inside the treeinfo function with "this".  But even then
this will have problems.  The Tree class doesn't define a "type" property.

I would rework your classes a little to put the TreeInfo function as a
member function on the Forest class, and pass in the Tree instance you want
the information from.  Of course, there are other ways to do this, and I
realize this is only sample code - your real code may not be doing this....

As for your questions, yes the this.trees[i] in your MakeTrees function does
point to your forest object.  This is because the MakeTrees function is a
member function (or method) of the Forest class.  If you call MakeTrees
directly (i.e. x = MakeTrees(), not x=my_forest.MakeTrees() ), then "this"
refers to the function itself (if I remember right), and you'll have
problems.

So, your forest class can have tree objects in it.  The tree class and it's
methods can also make reference to "this", but at that point, "this" is
refering to the tree object.

Oh, one last thing.  In your Forest function, the line "trees = new
Array();" should read "this.trees = new Array();".  If you don't make this
change, the trees variable will loose scope when the function is done.

Not really a well laid out response, but I hope it points you in the right
direction.  I'm "very" familiar with JS classes, so feel free to email me
off list if you need any other tips/help.

Shawn

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Behalf Of Nick W
Sent: Tuesday, March 02, 2004 4:14 PM
To: CLUG General
Subject: [clug-talk] OT - Javascript frustration


Sorry for the OT post but this makes no sense and every source I read tells
me
this should work.

I have a stupid problem with a script Im writing. I have an object which
contains an array of objects, which contain image objects. I set the
onmouseover property of the images to run a function which needs data from
one of the outermost object's properties. The said function can see the
object, but not its properties. OK thats clear as mud, let me try a
simplified example...

<begin lame example>

function Forest()
{
this.type = 'rainforest';
trees = new Array();

this.MakeTrees = MakeTrees;
}

function MakeTrees()
{
for(i = 0; i < 1000; i++)//make 1000 trees
        {
        this.trees[i] = new Tree();
        }
}

function Tree()
{
this.img = new Image();
//pretend I set the this.img properties here...
this.img.onmouseover = TreeInfo;
}

function TreeInfo()
{
alert(typeof(my_forest));
alert('This tree is in a ' + my_forest.type);
}

my_forest = new Forest();
my_forest.MakeTrees();
<end lame example>

When you mouseover a tree, the first alert in TreeInfo() will tell you
my_forest is an object, but the 2nd one will spit out "This tree is in a
undefined". Why??

Note, the above code was written very quickly and is probably unuseable, but
it serves its purpose as a lame example.

Its obviously some sort of scope issue with Java I dont get. AFAIK,
my_forest
should be global in this case. My other question is in MakeTrees() does the
'this' in 'this.trees[i]' point to my_forest? Of course the whole thing
could
be FUBAR....

tks.
--
Nick W (nickw77 at shaw.ca)
Registered Linux User #324288 (http://counter.li.org)
MSN Messenger: [EMAIL PROTECTED]
Yahoo: foolish_gambit
ICQ: 303276221
It's not our fault, we're outnumbered by stupid people ten to one.

_______________________________________________
clug-talk mailing list
[EMAIL PROTECTED]
http://clug.ca/mailman/listinfo/clug-talk_clug.ca


_______________________________________________
clug-talk mailing list
[EMAIL PROTECTED]
http://clug.ca/mailman/listinfo/clug-talk_clug.ca

Reply via email to