在日常开发中我们想生成一个新的对象,一般需要new一下,比如:let obj = new Object();new 看起来很牛逼的样子,那如何自己实现一个 new 呢?
在调用new的过程中,发生了四件事情:
- 新生成一个对象
- 连接到原型
- 绑定this
- 返回新对象 针对以上几步,我们可以写出代码:
function create(){
let obj = new Object();
let Con = [].shift.call(arguments) // 获取构造函数,传入create的构造函数类型
obj.__proto__ = Con.prototype // 链接到原型
let result = Con.apply(obj, arguments)
return typeof result === 'object ? result : obj
}