原理: 子类的原型对象 指向 父类的实例 , 当 子类实例 找不到属性和方法时,会沿着原型链往上找。
优点:简单,既是子类实例也是父类实例,父类新加原型方法或者属性,子类都能访问到
缺点:
通过使用call、apply方法可以在新创建的对象上执行构造函数,用父类的构造函数来增加子类的实例
原理: 子类的构造函数中执行父类的构造函数,并且改变子类的this绑定
优点:简单,直接父类的属性和方法
缺点:无法继承原型链上的属性方法
将父类原型对象直接赋值给子类的构造函数,再将空属性的构造函数实例赋值给子类原型对象
优点:完美实现继承,解决了组合式继承带两份属性的问题; new Child的时候不用 每次都 new Parent
缺点: 子类的prototype添加方法会影响 父类的prototype
将父类原型对象直接赋值给子类的构造函数,再将空属性的构造函数实例赋值给子类原型对象
优点:完美实现继承,解决了组合式继承带两份属性的问题; new Child的时候不用 每次都 new Parent
将等待继承的原型对象克隆,再赋值给继承的原型对象
优点:直接通过对象生成一个继承该对象的对象
缺点:不是类式继承,而是原型式基础,缺少了类的概念
参考: https://www.jb51.cc/note/413574.html
https://blog.csdn.net/qq_42926373/article/details/83149347
1.每个构造函数都有一个原型对象
2.每个原型对象都包含一个指向构造函数的指针
3.每个实例都包含一个指向原型对象的指针
4.查找方式是一层层向上查找直至顶层Object.prototype
1.原型链继承
2.借用构造函数(call,apply)
3.组合继承(原型链+构造函数)
4.原型式继承
5.寄生式组合式继承
每一种继承的方式都有自己的优缺点
组合继承的特点是会调用构造函数两次,
都是将多种继承方式组合到一起相辅相成.
1.创建一个空的对象
2.将空的对象的proto成员指向构造函数的prototype成员对象
3.调用构造函数将this指向前面创建的对象