Strange thing with "this" pointer

  • Thread starter piotr.korzeniewski
  • Start date
P

piotr.korzeniewski

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!
 
R

Richard Cornford

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();
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.
 

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. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,997
Messages
2,570,240
Members
46,828
Latest member
LauraCastr

Latest Threads

Top