new 构造函数

普通函数执行

  • 形成全新的执行上下文EC
  • 形成AO变量对象
    • 初始化arguments变量对象
    • 形参赋值
  • 声明this的指向
  • 初始化作用域链ScopeChain
  • 代码执行

new 函数执行

  • 形成全新的执行上下文EC
  • 形成AO变量对象
    • 初始化arguments变量对象
    • 形参赋值
  • 声明this的指向
  • 初始化作用域链ScopeclChain
  • [new] 创建实例对象,当前构造函数的实例
  • [new] 声明this的指向,指向新创建的实例
  • 代码执行
  • [new] return 的值
    • 如果构造函数没有写return或者return的是基本类型值,那么return 新创建的实例
    • 如果构造函数return的是引用类型值,那么return这个引用类型值

模拟new执行构造函数

function _new (func,...args) {
  let obj = Object.create(func.prototype)
  let result = func.call(obj,...args)
  if (result !== null && typeOf result === "object" || typeOf result === "function") {
    return result
  }
  return obj
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。