let constance = _new(Constructor, args);
// 实现过程伪代码
function _new(fn, ...arg) {
const obj = Object.create(fn.prototype);
// 等价于
// let obj = new Object();
// obj.__proto__ = fn.prototype;
const ret = fn.apply(obj, arg);
return ret instanceof Object ? ret : obj;
}
调用new会创建一个新对象(也就是构造函数的实例),this会绑定到new出来的实例上。
-
创建一个新对象obj;
-
将实例的__proto__ 指向构造函数的原型对象,实现继承构造函数原型上的功能;
-
当调用_new时,就会执行构造函数的apply方法,完成obj绑定到this的操作;(也就是this会指向新构建的对象)
-
除非构造函数的apply方法的返回了其他对象,不然就返回新创建的对象obj;