Боюся, що ваш приклад працює не так, як ви думаєте. Ця частина:
this.do = function(){ /*do something*/ };
замінює визначення
MyClass.prototype.do = function(){ /*do something else*/ };
Оскільки новостворений об’єкт вже має властивість "робити", він не шукає прототиповий ланцюг.
Класична форма успадкування в Javascript незграбна, і її важко зрозуміти. Я б запропонував використовувати замість Дугласа Крокфордса простий шаблон успадкування. Подобається це:
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
На мій погляд, набагато чіткіший спосіб обробки об'єктів, конструкторів та успадкування в JavaScript. Ви можете прочитати більше в Crockfords Javascript: Хороші частини .