new 主要做了什么?
- 先创建了一个新的空对象obj={}
- 设置原型链,让这个空对象的
__proto__指向函数的原型prototype - 让构造函数中的this指向新创建的空对象obj
- 判断构造函数的返回值类型,如果return 出来东西是对象的话就直接返回 return 的内容,没有的话就返回创建的这个对象
自己实现 new 操作符
function create(Con, ...args) {
let obj = {};
obj._proto_ = Con.prototype;
let result = Con.apply(obj, args);
return result instanceof Object ? result : obj;
}