提问
new
操作符 具体做了什么?- 如果实现
new
?
new 操作符
- 首先创建了一个空对象
- 设置原型,将对象的原型指向函数的原型
- 让函数的
this
指向这个对象的原型,并执行构造函数的代码 - 判断函数的返回值类型,如果是值类型,返回创建的对象,如果是引用类型,返回这个引用类型的对象。
实现
function newFactory(constructor, ...args) {
if (typeof constructor !== 'function') {
throw new Error('constructor must be a function');
}
const object = Object.create(constructor.prototype);
const result = constructor.apply(object, args);
if (result && (typeof result === 'object' || typeof result === 'function')) {
return result;
} else {
return object;
}
}