持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情
Js万物皆对象
构造函数执行 VS 普通函数执行:
- 构造函数执行也像普通函数执行一样,产生私有上下文
- AO
- 作用域链
- 初始this
- ...
- 释放和不释放
- 区别
- 默认创造一个空实例对象
- Fn被称为类/构造函数
- 创造的这个对象称之为类的实例对象
- 让上下文中的this指向创建的实例对象
- 代码执行中,出现的 this.xxx=xxx,就是在给实例对象设置私有属性
- let xxx=xxx 和实例对象没关系,只是给上下文中设置私有变量
- 观察函数的返回值 return
- 如果函数返回的是“原始类型值”(或者没有返回值),则把创建的实例对象返回
- 只有自己手动返回对象类型值,才以自己返回的为主
- 有无new区别
-
FN(10,20)函数执行,产生私有上下文;
Fn 函数本身堆内存
-
new Fn(10,20)构造函数执行,创建其一个实例;
new Fn;构造函数也执行了,只不过没有传递实参
-
计算优先级:有参数列表new > 无参数列表new
构造函数模式好处:
- 每一次new执行,都创造一个新的实例对象,实例和实例之间是“独立”的
- 除了独立性还具备“公有”性,都可以基于__proto__找到所属类原型对象上为其提供的公共属性方法;非常方便的实现对“公/私”的管理;在插件、组件封装的时候,这个特点非常重要!!
所有对象都是Object的实例
- 在不确定是谁new出来的时候,可以让其指向Object.prototype
- 基本任何对象最后都可以基于__proto__找到Object.prototype
所有函数都是Function内置类的实例
- 不论是内置构造函数,还是自定义的,再者是普通函数,基本都如此
Object是所有对象的“基类(最底层)”
- Object.prototype.__proto__如果有值也是Object.prototype自己,没有意义。
- 所以此处的__proto__ --> null
原型链
原型链查找机制:当进行“成员访问”的时候,先找对象的私有属性,如果存在则找的就是私有的;如果不存在,则默认按照__proto__去其所属类的原型对象prototype上查找;如果依然找不到,则继续基于原型对象的__proto__向上查找...直到找到Object.prototype为止!