あなたの例は、あなたが考えているようには機能しません。この部分:
this.do = function(){ /*do something*/ };
の定義を上書きします
MyClass.prototype.do = function(){ /*do something else*/ };
新しく作成されたオブジェクトには既に「do」プロパティがあるため、プロトタイプ チェーンは検索されません。
Javascript の継承の古典的な形式は扱いにくく、把握するのが困難です。代わりに Douglas Crockford の単純な継承パターンを使用することをお勧めします。このような:
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: The good partsを参照してください。