Javascript覆盖原型方法

时间:2012-12-06 21:54:17

标签: javascript inheritance prototype

也许有人可以向我解释,为什么我不能从B的原型级覆盖方法moep。我找到了一个例子(http://stackoverflow.com/questions/11148960/javascript-prototype-method-override-not-found),如果我用B.prototype = ...覆盖这个函数,它就可以了。那么为什么我必须指定.prototype来覆盖函数?

问候 - 托马斯

A = function() {
    this.moep = function() { 
        alert("Im in class A!");  
    };
};

B = function() {
};

B.prototype = new A();
B.moep = function() { 
    alert("Im outside!");  
};

var keks = new B();
keks.moep(); // Alerts "Im in class A"

1 个答案:

答案 0 :(得分:3)

您要分配给B.moep,而不是B.prototype.moep或(B} this.moep内。 B.moep根本不参与原型链。

通过new <functionname>创建对象时,对象的原型从<functionname>.prototype设置。因此,如果您要覆盖moep分配给由A创建并分配给new A的实例的B.prototype,则需要分配给B.prototype。< / p>