Obawiam się, że twój przykład nie działa tak, jak myślisz. Ta część:
this.do = function(){ };
zastępuje definicję
MyClass.prototype.do = function(){ };
Ponieważ nowo utworzony obiekt ma już właściwość „do”, nie sprawdza łańcucha prototypów.
Klasyczna forma dziedziczenia w Javascript jest niezręczna i trudna do zrozumienia. Sugerowałbym zamiast tego użycie prostego wzoru dziedziczenia Douglasa Crockforda. Lubię to:
function my_class(name) {
return {
name: name,
do: function () { }
};
}
function my_child(name) {
var me = my_class(name);
var base_do = me.do;
me.do = function () {
if (this.name === 'something'){
} else {
base_do.call(me);
}
}
return me;
}
var o = my_child("something");
o.do();
var u = my_child("something else");
u.do();
Moim zdaniem dużo jaśniejszy sposób obsługi obiektów, konstruktorów i dziedziczenia w javascript. Możesz przeczytać więcej w Crockfords Javascript: The good parts .