function A(name, gender) {
this.name = name;
this.gender = gender;
}
A.prototype.speak = function() {
alert('Calling from A ' + this.name);
};
function B(name, gender){
this.name = name;
this.gender = gender;
}
B.prototype.speak = function() {
alert('Calling from B ' + this.name);
};
B.prototype = Object.create(A.prototype);
B.prototype.constructor = B;
var b = new B('shane', 'M');
console.log(b);
b.speak();
prototype chain
查看父原型方法而不是查看Child原型方法?instance b
仅包含instance propeties
和methods
而不是prototype methods
吗?上面的代码打印"Calling from A Shane"
;
答案 0 :(得分:2)
原型链以期望它工作的方式工作,但是当您使用Object.create
分配时,您将使用A的原型覆盖B的原型。
关于原型继承(令人困惑,是的,神奇的,没有)没有什么神奇之处,它只是遍历原型链,直到找到匹配的方法。通过覆盖B&B的原型,您已从链中移除了B&#39}的speak
版本。
为了让事情按照你想要的方式运作(例如让B继承自A,但拥有它自己的speak
方法),你需要从B <覆盖方法em>在之后你已经分配了原型:
B.prototype = Object.create(A.prototype);
B.prototype.constructor = B;
B.prototype.speak = function() {
alert('Calling from B ' + this.name);
};
<强> jsbin 强>
B的实例将在其原型上具有所有方法,但如果需要,您还可以添加仅实例方法。
答案 1 :(得分:1)
B.prototype.speak
,然后通过将原型设置为A.prototype