By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
464,822 Members | 1,058 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 464,822 IT Pros & Developers. It's quick & easy.

Strange thing with "this" pointer

P: n/a
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!

Feb 4 '07 #1
Share this Question
Share on Google+
1 Reply

P: n/a
<pi****************@gmail.comwrote:
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();
<snip>
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".
<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.

Feb 4 '07 #2

This discussion thread is closed

Replies have been disabled for this discussion.