Saya khawatir teladan Anda tidak bekerja seperti yang Anda pikirkan. Bagian ini:
this.do = function(){ /*do something*/ };
menimpa definisi
MyClass.prototype.do = function(){ /*do something else*/ };
Karena objek yang baru dibuat sudah memiliki properti "do", itu tidak mencari rantai prototypal.
Bentuk klasik warisan dalam Javascript adalah awkard, dan sulit untuk dipahami. Saya sarankan menggunakan pola pewarisan sederhana Douglas Crockfords sebagai gantinya. Seperti ini:
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
Menurut pendapat saya cara yang jauh lebih jelas dalam menangani objek, konstruktor dan pewarisan dalam javascript. Anda dapat membaca lebih lanjut di Crockfords Javascript: Bagian yang baik .