# 模拟new操作符
new关键字
- 创建一个空的简单JavaScript对象(即{});
- 链接该对象(即设置该对象的构造函数)到另一个对象 ;
- 将步骤1新创建的对象作为this的上下文 ;
- 如果该函数没有返回对象,则返回this。
new.target
- 允许你检测函数或构造方法是否是通过new运算符被调用的。
- 在通过new运算符被初始化的函数或构造方法中,new.target返回一个指向构造方法或函数的引用。
- 在普通的函数调用中,new.target 的值是undefined。
function myNew(F, ...args) {
if (typeof F !== 'function') {
throw 'new 操作符第一个参数必须是函数'
}
myNew.target = F // 指向构造函数
let o = Object.create(F.prototype)
let r = F.apply(o, args)
return typeof r === 'object' || typeof r === 'function' || r !== null ? r : o
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9