恐怕你的例子不像你想的那样奏效。这部分:
this.do = function(){ /*do something*/ };
覆盖定义
MyClass.prototype.do = function(){ /*do something else*/ };
由于新创建的对象已经具有“do”属性,因此它不会查找原型链。
Javascript 中的经典继承形式很笨拙,而且难以掌握。我建议改用 Douglas Crockfords 的简单继承模式。像这样:
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 中阅读更多内容。