new操作符
提问
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
}
}