构造函数

定义: 和普通函数没区别,为了区分功能两者功能,通过new关键字来调用的函数,称为构造函数,首字母常习惯大写

功能: 构造函数主要用于初始化对象

js之-构造函数,原型,new的实现,原型链js之-构造函数,原型,new的实现,原型链

原型

定义:

  1. 构造函数中都默认有prototype原型对象,包含两个属性:constructor和_proto_
  2. constructor属性指向的prototype所在构造函数本身
  3. _proto_属性指向上一个原型的prototype原型

js之-构造函数,原型,new的实现,原型链
js之-构造函数,原型,new的实现,原型链
为什么实例化的_proto_ 与 构造函数的prototype相等?主要在new操作符的实现过程

new操作符的实现

new操作符实例化出来的,默认含有_proto_,指向构造函数的prototype
由下图51行可以看到,通过给实例化对象添加_proto赋值构造函数的prototype,所以可以解释上面 ‘原型-定义中的第3条’,实例化的_proto_ === 构造函数的prototype

js之-构造函数,原型,new的实现,原型链

原型链

定义: 每个对象都有原型对象,通过_proto_指针指向上一个原型,并从中继承方法和属性,同时原型对象也可能拥有原型,这样一层一层,最终指向 null

先看代码:
js之-构造函数,原型,new的实现,原型链
js之-构造函数,原型,new的实现,原型链
综合上面的知识可知原型链的顺序为:

  1. 首先通过new操作符,实例化构造函数,实例中含有_proto_属性(等于上一个构造函数Person2的prototype)
  2. 再通过Person2的_proto_指向上一层Object的prototype
  3. Object.proto 为null

图片:
js之-构造函数,原型,new的实现,原型链

相关文章: