new关键字做了哪些事
- 创建一个新对象
- 将构造函数的作用域赋给新对象(更改this指向)
- 执行构造函数的代码(为新对象添加属性,实例化对象)
- 返回新对象
自定义实现new关键字
function _new(func, ...args) {
if (typeof func !== 'function') {
return {};
}
let newObj = Object.create(func.prototype);
let result = func.apply(newObj, ...args);
if ((result !== null && result === 'object') || result === 'function') {
return result;
}
return newObj;
}