new 做了什么事情
我们从栗子开始:
1 | |
结果:
那么,new究竟做了什么呢?
- 创建了一个新对象(是 Object 类型的数据)
- 将 this 指向新对象
- 将创建的对象的原型指向构造函数的原型
- 返回一个对象(如果构造函数本身有返回值且是对象类型,就返回本身的返回值,如果没有才返回新对象)
手动实现一个 new
废话不说,直接上代码:
1 | |
结果:

关于为什么要判断 ret instanceof Object
instanceof Object 来判断是否是对象,包含 Array,Object,Function、RegExp、Date,具体类型判断可以看我上一篇博客 判断数组(判断类型)
扶正,构造函数是能够自己指定返回一个对象的,so,如果不判断类型,_new出来的对象可能就不对了,栗子说明:
1 | |
结果1,原生new:
结果2,_new:
可以看到,原生的new因为Dog构造函数只return了 {a:嗬嗬},所以报错了,而没有判断类型的_new没有返回{a:'嗬嗬'}