Strange thing with "this" pointer

Discussion in 'Javascript' started by piotr.korzeniewski, Feb 4, 2007.

  1. I'm really confused with this one, first please take a look at code
    below:

    function Class(obj)
    {
    if(!obj) obj = new Object();

    obj.Extend = function(obj) {
    this.__parent__ = new Object();

    for(p in this) {
    this.__parent__[p] = this[p];
    }

    for(p in obj) {
    this[p] = obj[p];
    }

    return this;
    }

    return obj;
    }

    function A()
    {
    return Class({ name : "Class A" })
    }

    function B()
    {
    return A().Extend({ name : "Class B" });
    }

    function C()
    {
    return B().Extend({ name : "Class C" });
    }

    var a = A();
    var b = B();
    var c = C();

    alert(b.__parent__.name);

    Alright, this code is quite simple but one thing is really confusing -
    it should alert "Class A" and it does in Internet Explorer and Opera,
    but strangly in Firefox it alerts "Class B".. But what's even more
    confusing - if I remove line "var c = C()", Firefox magically alerts
    "Class A". What in the world has line "var c = C()" to do with "var b
    = B()" ? The only thing that comes to my mind is this part of code:

    [...]
    this.__parent__ = new Object();

    for(p in this) {
    this.__parent__[p] = this[p];
    }
    [...]

    But why does it works well in Internet Explorer and Opera? It doesn't
    make any sense..

    Thanks for any help!
     
    piotr.korzeniewski, Feb 4, 2007
    #1
    1. Advertisements

  2. <snip>

    Objects in JavaScript(tm) have a non-standard extension property called
    "__parent__", which is probably read only. Your use of that name in your
    code is probably causing a naming collision and unexpected results in
    browsers suing JavaScript(tm).

    Richard.
     
    Richard Cornford, Feb 4, 2007
    #2
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.