原则: 子类可以继承父类,但不能影响父类
es5 继承
构造函数继承:
原型链继承:
- Child.prototype = Parent.prototype ❌ 引用传递,子类原型的改变会引起父类原型的改变
- Object.assign(Child.prototype, Parent.prototype) ✅ 父类的原型合并到子类原型,不影响父类
Child.prototype = new Parent() ✅ 父类的实例给子类的原型,需要把子类的构造函数改回来
Child.prototype.constructor = Child
// 父类的实例给子类的原型,为什么需要把子类的构造函数改回来?
const p1 = new Parent();
p1.__proto__ = Parent.prototype;
p1.__proto__.constructor = Parent.prototype.constructor = Parent;