JS 原型和原型链的理解(图)
原型
原型图(图片来源:JavaScript高级程序设计)
- 构造函数
Person
的原型(Person.prototype) 指向Person Prototype
- 原型
Person Prototype
的构造函数(Person.prototype.constructor) 指向Person
- 实例
person1
的隐式原型(person1._proto_ )指向Person Prototype
- 实例
person2
的隐式原型(person2._proto_ )指向Person Prototype
原型链
原型链图(图片来源:自己画的)
- 第一行:所有类型默认都继承
Object
- 第二行:
Super(构造函数)
的原型,默认继承自Object
- 第三行:
Sub (构造函数)
的原型,是Subper
的一个实例,继承自Super
- 第四行:
subInstance (实例)
,是Sub
的一个实例,继承自Sub
代码实现
function Super() {};
function Sub() {};
Sub.prototype = Object.create(Super.prototype);
// ↑ 或者 Sub.prototype = new Super();(不推荐,子类会具有父类实例的方法,可能不是我们需要的)
Sub.prototype.constructor = Sub; // 修改原型对象,一般要同时修改,constructor 属性的指向
const subInstance = new Sub();