构造函数与原型
构造函数三要素
- 构造函数定义与调用
- 首字母大写
- 内部使用this对象指向需要生成的实例对象
- 使用new字符调用
- 实例化与内存
- 实例化:创建一个实例对象,分配内存
- 执行构造函数:对分配的内存空间进行实例化
prototype/____proto
- prototype属性
- 使用者:函数(构造函数指向实例化对象的原型对象)
- 创建者:创建一个函数Fun,则内部包含有prototype属性(指向实例化对象的原型对象),并初始化constructor 属性引用该函数
- 作用:通过原型对象添加属性和方法,实现属性和方法的共享
- ______proto_____属性
- 每个实例对象(Object)都有该属性(指向实例化的原型对象)
- 实例对象可以访问这个原型对象中的属性,就像本身拥有该属性一样
- 原型对象
- 看做公共容器
- 定义在原型对象上的属性会让其所有实例对象都共享这个属性,但是不会在实例内部重新定义这个方法,内存占用较小
- Fun.prototype === fun.proto
- Fun.prototype.constructor === Fun
静态/实例/原型属性
- 实例对象可以访问本身对象上的实例属性,也可以访问原型对象上的原型属性,但是不能访问构造函数上的静态属性。静态属性只能通过构造函数来访问。
new运算符
- 构造函数返回值
- 没有return,返回this,即实例对象
- 有return,且返回值为基本数据类型,构造函数忽略return,返回this对象;返回值为引用数据类型,构造函数返回return值。
- new运算符作用
- 创建空对象,即{}
- 执行[[prototype]]连接
- 将该对象作为this的上下文,并执行构造函数