Korkarım örneğiniz düşündüğünüz gibi çalışmıyor. Bu kısım:
this.do = function(){ /*do something*/ };
tanımının üzerine yazar
MyClass.prototype.do = function(){ /*do something else*/ };
Yeni oluşturulan nesne zaten bir "do" özelliğine sahip olduğundan, prototip zincirine bakmaz.
Javascript'teki klasik miras biçimi garip ve anlaşılması zor. Bunun yerine Douglas Crockfords basit kalıtım modelini kullanmanızı öneririm. Bunun gibi:
function my_class(name) {
return {
name: name,
do: function () { /* do something */ }
};
}
function my_child(name) {
var me = my_class(name);
var base_do = me.do;
me.do = function () {
if (this.name === 'something'){
//do something new
} else {
base_do.call(me);
}
}
return me;
}
var o = my_child("something");
o.do(); // does something new
var u = my_child("something else");
u.do(); // uses base function
Bence javascript'te nesneleri, yapıcıları ve kalıtımı işlemenin çok daha net bir yolu. Crockfords Javascript: The good parts'da daha fazlasını okuyabilirsiniz .