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