普通函数执行
- 形成全新的执行上下文EC
- 形成AO变量对象
- 声明this的指向
- 初始化作用域链ScopeChain
- 代码执行
new 函数执行
- 形成全新的执行上下文EC
- 形成AO变量对象
- 声明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
}