1.在父类和子类上面都实现了一个相同的方法,但是想有时候使用父类方法,有时候使用子类方法,代码是这样的
function A () {
this.name = 'testA'
}
A.prototype.sayName = function () {
console.log('A')
}
function B () {
A.call(this)
this.name = 'testB'
}
B.prototype = Object.create(A.prototype)
B.prototype.sayName = function () {
console.log('B')
}
var a = new A()
a.sayName()
var b = new B()
b.sayName()
b.__proto__.sayName() //输出B 这为什么输出的不适A
为什么不能使用__proto__ 来调用父类上面的sayName方法呢?
楼主的本意应该是
1.B原型继承了A,B应该有A的所有属性及方法;
2.但是,从你的代码中看出你的继承关系已经出现错误,如果B想继承A的所有属性,正确的写法为,B.prototype =
new A();
3.由于你在继承A之后又重新在原型上定义与A相同的属性,这样会覆盖之前继承的A的属性,导致最后输出的结果为
B。
4.如果B继承了A,那么B拥有A的所有属性,所以,不用b.__proto__直接b.sayName就可以拿到A(用你现在的代码得到的还是B)
在你代码基础上更改: