盗用构造函数继承(对象伪装或经典继承),个人觉得的盗用构造函数继承这个名字更语义化,听到这个名字就能想到。子类构造函数调用父类构造函数,利用函数在特定上下文中执行的特性,去创建一个对象实例
主要使用call或者apply方法以先创建的对象为上下文执行构造函数。
- 优点:解决了子类构造函数可以向父类构造函数传参的问题
- 缺点:实例不能访问父类构造函数的原型,因此也不能访问父类构造函数原型的方法和属性
使用call方法,让父类构造函数在子类构造函数中执行,更像创建对象的工厂模式,是直接在子类构造函数中创建一个新的对象,以this承接上下文的特性,将父类当做函数执行,将属性赋值给当前函数下的this。并没有形成一个”父子继承的原型链“。或者说子构造函数原型的__proto__指向Object的原型,不是父类构造函数的原型。如果要共享方法只能在父类构造函数中声明,这样又回到了构造函数模式的通病。
原型链继承通过instanceof 判断: 实例继承了哪些构造函数的原型。