这是你的代码:
function A() {}
A.prototype.bar = function(){ return 'A';}
function B() {}
B.prototype.bar = function(){ return 'B'; }
B.prototype = new A() ; // replaces B's "bar" with A's "bar
var b = new B ;
console.log(b.bar());
如您所见,问题出在第 6 行。您首先B.prototype.bar
在第 5 行设置了一个函数,然后您立即在第 6 行设置B.prototype
为new A
(有效地撤消了您在第 5 行中所做的操作)。解决方案是将第 6 行放在第 5 行之前:
function A() {}
A.prototype.bar = function(){ return 'A';}
function B() {}
B.prototype = new A() ; // now it will work
B.prototype.bar = function(){ return 'B'; }
var b = new B ;
console.log(b.bar());
亲自查看演示:http: //jsfiddle.net/eQBUx/1/
另外我同意Bergi:停止使用new
关键字。
更新:阅读您的评论并更详细地了解您的问题后,我建议您使用我的augment
库进行继承:
var A = Object.augment(function () {
this.constructor = function () {};
this.bar = function () {
return "A";
};
});
var B = A.augment(function (base) {
this.constructor = function () {};
this.bar = function () {
return "B" + base.bar.call(this);
};
});
var b = new B;
console.log(b.bar());
查看演示:http: //jsfiddle.net/eQBUx/2/