- 创建一个空对象
- 设置原型,将对象的原型设置为构造函数的prototype
- 将this指向新对象并执行构造函数
- 判断构造函数返回的值的类型 如果是引用类型则直接返回这个引用类型 如果是值则返回新对象
function myNew(Ctor, ...params) {
let obj = Object.create(Ctor.prototype);
// Object.create(A):创建一个空的对象并把A作为新对象的原型(新对象.__proto__ === A); A只能是null或者是对象类型
let result = Ctor.call(obj, ...params);
if (result && (typeof result === "object" || typeof result === "function")) {
return result
}
return obj;
}