携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情
前言
构造函数与普通函数
一般规则
构造函数都应该以 一个大写字母开头,
而非构造函数则应该以一个小写字母开头,
调用方式
任何函数,只要通过 new 操作符来调用,那它就可以作为构造函数 ;
任何函数,如果不通过 new 操作符来调用,那它跟普通函数也没有什么两样。
每个"构造函数"中都有一个默认的属性, 叫做 prototype, prototype属性保存着一个对象, 这个对象我们称之为"原型对象", prototype 指向它的原型对象
每个"原型对象"中都有一个默认的属性, 叫做constructor, constructor 指向当前原型对象对应的那个"构造函数"
通过构造函数创建出来的对象我们称之为"实例对象", 每个"实例对象"中都有一个默认的属性, 叫做__proto__(隐式原型), proto 指向创建它的那个构造函数的"原型对象"
实例对象._ proto_ ===构造函数.prototype
基本关系
- 所有函数都是Function构造函数的实例对象
- 所有函数都是对象, 包括Function构造函数
- 所有对象都有
__proto__属性 - 普通对象的
__proto__属性指向创建它的那个构造函数对应的"原型对象"
特殊关系
- 所有对象的
__proto__属性最终都会指向"Object原型对象" - "Object原型对象"的
__proto__属性指向NULL
原型
- 每个class都有显式原型
prototype - 每个实例都有隐式原型
__proto__ - 实例的
__proto__指向对应class的prototype
原型链
对象中__proto__组成的链条我们称之为原型链,
对象在查找属性和方法的时候, 会先在当前对象查找, 如果有就用自己的
如果当前对象中找不到想要的, 会依次去上一级原型对象中查找
如果找到Object原型对象都没有找到, 就会报错
如图,首先在Student实例对象上查找属性与方法,
若没有,则自动去隐式原型__proto__中寻找,
而其隐式原型__proto__指向其父类People隐式原型,
直到找到Object原型对象,其隐式原型__proto__指向NULL为止。
如类型判断instanceof判断其左边对象是否为其右边类的实例,返回boolean类型的数据,
某个变量顺着自己的隐式原型能否找到对应的显式原型,
找到则为true,否则为false。
最后
本人对原型与原型链的浅显认知,仅供参考!