- 先创建一个新对象
- 新对象内部的
[[ Prototype ]]
指针被赋值为构造函数的 prototype 属性; - 构造函数内部的 this 指向这个新对象
- 执行构造函数内部的代码(给新对象添加属性)
- 如果构造函数返回一个对象(非
null
),则返回该对象;
否则,返回刚创建的新对象
function myNew(constructor, ...params) {
// const obj = {}; // const obj = Object.create(null);
// Object.setPrototypeOf(obj, constructor.prototype);
const obj = Object.create(constructor.prototype);
const res = constructor.apply(obj, params);
const type = typeof res;
return ((type === 'object' && res !== null) || type === 'function' ) ? res : obj;
}
案例测试:
function person(name, age) {
this.name = name;
this.age = age;
// return null;
}
const p = myNew(person, '布兰', 12);
console.log(p); // { name: '布兰', age: 12 }
const q = new person('布兰', 12);
console.log(q); // { name: '布兰', age: 12 }