When you say:

> function PureClass(){};
> var wow = new PureClass();
> wow.constructor;  // and I would get PureClass

What you really mean is that, in Firebug, you get the string:
"PureClass()" displayed, correct?

That's because Firebug takes advantages of the non-standard `name`
property of function objects implemented by Firefox. This property
gets populated with the name of the function declaration. It's
specification in ES 3.1 is currently being discussed[1].

I suppose that your main concern is for debugging purposes, isn't that
correct? You might be interested in reading kangax's post[2] on a
related subject, which could solve part of your problem.

If not, you can use uglier solutions (as long as you know the
namespace in which you've declared your classes):

    function inspect(klass) {
      var namespace = window; // or myLib or whatever
      for (var prop in namespace) {
        if (namespace[prop] === klass) {
          return prop;
        }
      }
      throw "Can't find class in " + namespace;
    }

Best,

Tobie

[1] https://mail.mozilla.org/pipermail/es-discuss/2009-March/008905.html
[2] http://thinkweb2.com/projects/prototype/semantic-constructors/


On Mar 9, 1:58 am, "dzw!" <bartoszw...@googlemail.com> wrote:
> Tobie, thanks for answer it is helpful but still what I am looking for
> is practical advice how do you handle it in Prototype.
>
> Just to clarify:
>
> //this is what I would do without using Prototype
>
> function PureClass(){};
> var wow = new PureClass();
> wow.constructor;  // and I would get PureClass
>
> // in Prototype the same
>
> var PureClassPrototype = Class.create();
> var wow_prototype = new PureClassPrototype();
> wow_prototype.constructor; // here I get not very helpfull klass() -
> ok it is helpfull and much better than nothing :)
> wow_prototype.constructor == PureClassPrototype;  // true
>
> So I am maybe wrong but in JS I get what I want, but in Prototype my
> guess is that there is some other way[i have few ideas how to go
> around that but I am quite sure It is already solved]..
>
> Or if I am going in very bad direction and what I am trying is
> useless,stupid etc ..  please let me know.. :)
>
> Same is for e.g with Class.subclasses , I got Array of [ klass(), klass
> () ] and than all I can do is '==' against Something, what I am
> looking for is to have in that case array of [Something,
> SomethingElse ]
>
> Thanks
>
> dzw!
>
> On Mar 9, 1:08 am, Tobie Langel <tobie.lan...@gmail.com> wrote:
>
> > Hi,
>
> > JavaScript, as a language doesn't have the self-reflexiveness you are
> > looking for.
>
> > There are different hacks to find this kind of information, but imho
> > they go against the dynamic and prototypical nature of the language.
>
> > When you do:
>
> >     var Foo = Class.create({});
>
> > what you are actually doing is creating a constructor (a function
> > declaration contained in the closure created by Class.create), which
> > you then assign to the "Foo" variable. (In prototype, that constructor
> > happens to be called "klass", but it could be called anything else,
> > that wouldn't change anything).
>
> > It would now be very well possible to do:
>
> >     var Bar = Foo;
>
> > and use:
>
> >     new Bar();
>
> > to create a new "Foo" object.
>
> > If the classes you create are in the global scope, you can always
> > iterate over the global object (window, or this) to find the name of
> > the variable that points to your constructor object. But apart from
> > debugging purposes, there is little use for that.
>
> > Hope this clarifies your issue.
>
> > Best,
>
> > Tobie
>
> > On Mar 8, 12:19 pm, "dzw!" <bartoszw...@googlemail.com> wrote:
>
> > > Houston, new Prototype user has a problem:
>
> > > var SimpleClass = Class.create({})
> > > var xxx = new SimpleClass();
>
> > > xxx.constructor == SimpleClass // i got true
>
> > > xxx.constructor // i got klass()
>
> > > So what I am looking  is: how to get the constructor name? the same is
> > > with Prototype's superclass and subclasses.. I tried to google it but
> > > with no success.
>
> > > Any hint? What is about that "klass()" thing?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Prototype & script.aculo.us" group.
To post to this group, send email to prototype-scriptaculous@googlegroups.com
To unsubscribe from this group, send email to 
prototype-scriptaculous+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to