Me temo que su ejemplo no funciona la forma de pensar . Esta parte:
this.do = function(){ /*do something*/ };
sobrescribe la definición de
MyClass.prototype.do = function(){ /*do something else*/ };
Puesto que el objeto recién creado ya tiene un "hacer" la propiedad, que no se ve en la cadena de prototipos.
La forma clásica de herencia en Javascript es incómoda y difícil de entender. Sugeriría utilizar el patrón de herencia simple Douglas Crockfords en su lugar. De esta manera:
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
En mi opinión una manera mucho más clara de la manipulación de objetos, constructores y herencia en JavaScript. Puede leer más en Crockfords Javascript: The good parts.
¿Cuál es el método de base? this.do = function() {} en el constructor? –