申し訳ありませんが、あなたの例はあなたの考えているようには機能しません。この部分:
this.do = function(){ /*do something*/ };
の定義を上書きします
MyClass.prototype.do = function(){ /*do something else*/ };
新しく作成されたオブジェクトにはすでに「do」プロパティがあるため、プロトタイプチェーンを検索しません。
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:The good partsを参照してください。