技术实践

关于构造函数和普通函数底层运行原理的对比

构造函数执行时同样也是先形成一个独立的私有上下文;在私有上下文中有用于保存私有变量的活动对象AO - 与普通函数不同的是:构造函数在形成私有

羊先生的头像
羊先生2020.11.08 · 3 分钟阅读 · 47 阅读
关于构造函数和普通函数底层运行原理的对比封面
文章正文还需 3 分钟

普通函数

  • 普通执行时形成一个独立的私有上下文;在私有上下文中有用于保存私有变量的活动对象AO
  • 初始化作用域链
  • 初始化this
  • 初始化arguments
  • 形参赋值
  • 变量提升
  • 代码执行
  • 返回值:return啥就是啥

构造函数执行

  • 构造函数执行时同样也是先形成一个独立的私有上下文;在私有上下文中有用于保存私有变量的活动对象AO
  • 与普通函数不同的是:构造函数在形成私有上下文后,浏览器会默认创建一个实例对象(当前构造函数的实例)
  • 初始化this,并让this指向上一步中创建好的实例对象
  • 初始化arguments
  • 形参赋值
  • 变量提升
  • 代码执行
  • 函数返回值:
  • 如果没有返回值或返回值是一个基本类型值,则浏览器会忽略其返回值而是把创建的实例对象作为返回值返回
  • 如果返回值是一个引用类型值,则浏览器会把这个引用类型值作为返回值返回
20201106214830726.png

关于构new造函数加括号和不加括号的对比

new Fn VS new Fn()

  • 相同点:两种方式都是把函数Fn执行
  • 不同点:
  • new Fn 没有传递实参; 并且运算符优先级是18
  • new Fn():可以传递实参;并且运算符优先级是19

关于获取对象属性的一些总结

20201106220846176.png

关于对象中的原型和原型链的一些细节知识

20201107172159576.png
20201107173538614.png