информация к размышлению... :)
(комментировать сильно ломает - просто скопипастил код, который накатал когда-то разбираясь с новыми фичами МХ)

Код:
a = function () {
this.creator = this.constructor._property;
};
a._property = "A property";
a.prototype.property = "some property";
a.prototype.method = function() {
trace("a prototype method");
};
//
c = function () {
trace("c function");
};
a._method = c;
//
b = new a();
//
trace(chr(13)+">>> in a :: "+typeof (a));
for (i in a) {
trace(i+" :: "+typeof (a[i])+" :: "+a[i]);
}
trace(chr(13)+">>> in a.prototype :: "+typeof (a.prototype));
for (i in a.prototype) {
trace(i+" :: "+typeof (a.prototype[i])+" :: "+a.prototype[i]);
}
trace(chr(13)+">>> in b :: "+typeof (b));
for (i in b) {
trace(i+" :: "+typeof (b[i])+" :: "+b[i]);
}
trace(chr(13)+">>> in b.__proto__ :: "+typeof (b.__proto__));
for (i in b.__proto__) {
trace(i+" :: "+typeof (b.__proto__[i])+" :: "+b.__proto__[i]);
}
trace(chr(13)+">>> in b.constructor :: "+typeof (b.constructor));
for (i in b.constructor) {
trace(i+" :: "+typeof (b.constructor[i])+" :: "+b.constructor[i]);
}
trace(chr(13)+"b.__proto__ == a.prototype :: "+(b.__proto__ == a.prototype));
trace("b.constructor == a :: "+(b.constructor == a));
и никуда дебаты не пойдут :)
кому нужна эта теория... главное понять как оно работает =)