条件: A父类 、 B子类 、B类要继承A类
什么是原型链继承?
原理:将B类的原型对象 重写成父类A的一个实例 B.prototype = new A()
特点:将父类的私有属性和公有属性,都继承给自己的原型属性
1.请看代码示例:
function A {//给当前实例添加私有属性textthis.text = 'A类text'}A.prototype.age = 19A.prototype.say = function(){console.log('a类原型say')}function B (){}//将B类型对象改写为 A 实例//{text:'a类text',__proto__:A.prototype}let obj = new A();B.prototype = objB.prototype.constructor = B;const b = new B()//实例b 使用A类的属性方法console.log(b.__proto__ === B.prototype)//trueconsole.log(obj === B.prototype)//trueconsole.log(b.__proto__ === obj)//trueb.text //=>b.__proto__ =>B.prototype => text ( B.prototype = obj A类给实例添加了text属性所以.prototype有text属性 )
2.请看代码示例:
function Super() {this.name = 'super'}Super.prototype.age = 18function Sub() {}// Super 父类 Sub 子类// 原型链继承:将Super类的实例对象 改写为Sub类的原型对象// 把Super类上私有属性和公有属性,都继承为Sub类的原型属性Sub.prototype = new Super()Sub.prototype.constructor = Subconsole.log(Sub.prototype instanceof Super) // truelet s = new Sub()console.log(s.name)//superconsole.log(s.age)//18console.log(Sub.prototype instanceof Super)//trueconsole.log('通过子类查找父类属性方法', Sub.prototype.__proto__.age)//18// 子类重写父类 会影响到父类的所有实例Sub.prototype.__proto__.age = 38console.log(Super.prototype)//{name:'super',__protot__:Super.prototype}let a1 = new Super()console.log(a1.age)//38
