Sorry, there's a copy-and-paste error in the above.  The line in the
Prototype solution's initialize() function that reads

> this.constructor.theClass = 'MyPrototypeThing';

should read

> this.constructor.ctorName = 'MyPrototypeThing';

Sorry 'bout that.
--
T.J. Crowder
tj / crowder software / com

On Mar 28, 11:43 am, "T.J. Crowder" <[EMAIL PROTECTED]> wrote:
> Hi,
>
> > A function or property refering directly to the name/objectindex of
> > the obejct/class instance would be much more practical.
>
> But, again, what you're looking for, as you've stated it, is
> impossible.  An instance can be referred to by any number of
> variables, and the instance can have no idea what the names of those
> variables are.
>
> But based on your later comments, I don't think you're looking for the
> name of the variable pointing to an instance anyway.  You're looking
> for the name of the constructor function (which people sometimes call
> a "class").  E.g., in the non-Prototype world:
>
> * * * *
> function MyNiftyThing()
> {
>     // ....}
>
> MyNiftyThing.prototype.makeSomeElements = funtion()
> {
>     // make some elements}
>
> * * * *
>
> You want to know that the elements were created by MyNiftyThing.  And
> indeed, in the non-Prototype world, Mozilla's constructor.name
> property would tell you that, but as far as I know that's not
> supported by anyone else and even if it were, the way Class.create
> works, Mozilla's custom property would always return "klass" anyway.
>
> Here's how to do what I think you want to do, both non-Prototype and
> Prototype (tested on FF, IE6, Opera9, Safari 3 Windows beta):
>
> * * * *
> // Non-Prototype
> function MyNiftyThing()
> {
>     // Remember the name of the constructor function using a custom
>     // 'ctorName' property
>     arguments.callee.ctorName = 'MyNiftyThing';}
>
> MyNiftyThing.prototype.getCtorName = function()
> {
>     return this.constructor.ctorName;
>
> }
>
> // Prototype
> var MyPrototypeThing = Class.create({
>     initialize: function() {
>         this.constructor.theClass = 'MyPrototypeThing';
>     },
>     getCtorName: function()
>     {
>         return this.constructor.ctorName;
>     }});
>
> * * * *
>
> Strictly speaking you don't need the getCtorName function, anything
> with access to one of the instance of the class can see the name
> directly:
> * * * *
> var t;
> t = new MyPrototypeThing();
> alert("It's constructor name is " + t.constructor.ctorName);
> * * * *
>
> But it's better to encapsulate that using a function.
>
> All of this is possible because "classes" are just constructor
> functions, and functions are objects just like anything else, and so
> can have additional properties.  In this case, we're adding a ctorName
> property to the constructor function that we can use later.
>
> When you make the elements, you will still have to give them something
> they can use to find out who created them -- e.g., a reference to the
> instance that created them, or just the name of the constructor
> function [by giving them the return value from this.getCtorName()],
> something like that..
>
> Hope this helps,
> --
> T.J. Crowder
> tj / crowder software / com
>
> On Mar 27, 10:14 am, Jonas Rosenqvist <[EMAIL PROTECTED]> wrote:
>
> > Thanks for your replys guys, I see both of your points but I still
> > need to get the name of the instance of the object, not a reference.
>
> > The reason for this beeing that I'm creating dom elements that has to
> > be able to refer back to the the instance of the class whom created
> > them. And there may or may not be many instances of the same class so
> > it cant be done in any static way or with references as the dom
> > objects have a different scope.
>
> > The way I've solved it for the time beeing is passing the name of the
> > instance upon creation as a argument of class initialization. That
> > works great but it just looks stupid to me.
>
> > A function or property refering directly to the name/objectindex of
> > the obejct/class instance would be much more practical. There's
> > functions for this but it's mozilla only (I think it's called
> > object.constructor.name or something), and there's ways to do it in IE
> > and possibly other browsers too but they're ugly.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Spinoffs" group.
To post to this group, send email to rubyonrails-spinoffs@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-spinoffs?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to