- 新生成了一个对象
- 链接到原型
- 绑定
this
- 返回新对象
在调用
new
的过程中会发生以上四件事情,我们也可以试着来自己实现一个new
function create() {
// 创建一个空的对象
let obj = new Object()
// 获得构造函数
let Con = [].shift.call(arguments)
// 链接到原型
obj.__proto__ = Con.prototype
// 绑定 this,执行构造函数
let result = Con.apply(obj, arguments)
// 确保 new 出来的是个对象
return typeof result === 'object' ? result : obj
}