Tôi sợ ví dụ của bạn không hoạt động theo cách bạn nghĩ. Phần này:
this.do = function(){ /*do something*/ };
ghi đè định nghĩa của
MyClass.prototype.do = function(){ /*do something else*/ };
Vì đối tượng mới được tạo đã có thuộc tính "do", nên nó không tra cứu chuỗi nguyên mẫu.
Hình thức kế thừa cổ điển trong Javascript là khó hiểu và khó nắm bắt. Tôi sẽ đề nghị sử dụng mô hình thừa kế đơn giản Douglas Crockfords thay thế. Như thế này:
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
Theo tôi, một cách rõ ràng hơn nhiều để xử lý các đối tượng, các nhà xây dựng và kế thừa trong javascript. Bạn có thể đọc thêm trong Crockfords Javascript: Những phần hay .