- 先创建一个新对象
- 新对象内部的
[[ 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 }
