JavaScript继承
原型链
- 普通对象有__proto__和constructor
- 函数也是对象,没有constructor,独有prototype属性
原型链继承
优点:原型链上的属性和方法都可以被继承
缺点:子类无法向父类传参
1 | // 父类构造函数 |
借用构造函数/经典继承
优点:子类可以向父类传参
缺点:
- 只能继承父类的实例方法和属性,无法继承原型属性和方法
- 使用call实际上是对父类的复制,每个新实例就会复制一份
1 | function Father(age) { |
组合继承
结合原型链和经典继承
1 | function Father(age) { |
原型式继承
对象浅复制,增加一层__proto__的引用,Object.create()的实现
浅复制父类的原型对象作为子类的原型对象即可实现继承
1 | function createObj(obj) { |
寄生继承
寄生:函数内返回返回对象,然后调用函数
对原型式继承二次封装,对原型式继承生成的对象进行扩展后返回
1 | function creatAnother(origin) { |
寄生组合式继承
组合式继承中将父类的实例赋值给子类的原型对象的操作改为使用原型继承的方式浅复制一份父类的原型对象作为子类构造函数的原型对象
1 | function createObj(obj) { |