代码
function Parent(x) {
this.x = x
this.Hello = function () {}
}
Parent.prototype.getx = function () {
console.log('getx ===>', this.x);
}
function Sub(y) {
this.y = y
}
Sub.prototype = new Parent(100)
Sub.prototype.constructor = Sub
Sub.prototype.gety = function () {
console.log('gety ===>', this.y);
}
let sub = new Sub(200)
console.log(sub);
原型链继承就是让子类的prototype指向父类的实例。
再让prototype的constructor重新指向它关联的构造函数。用来补全原型(prototype),每个prototype原型都有一个constructor属性,指向它关联的构造函数。
后面我们又通过子类的prototype,写了一个公有的方法。
然后通过new出来的子类的实例可以获取自己的私有属性和方法。并且每个实例对象都有一个__proto__属性,指向自身构造函数的prototype。
但在上面我们让子类的prototype重新指向了父类的实例。就等于把父类的实例当成子类的prototype。父类的实例上有自己的私有属性和方法。
我们就可以通过子类的显示原型prototype获取到父类的私有属性和方法。
父类的实例有一个__proto__指向父类的prototype,父类的prototype上有父类的公有属性和方法,我们就可以通过原型链查找到父类的公有属性和方法。父类的prototype,有一个__proto__指向object.prototype。