new 操作符
规范定义 new 操作符如下:
- 创建一个空白且简单的对象
newInstance - 将
newInstance的 [[Prototype]] 指向构造函数的prototype属性 - 执行构造函数,将
newInstance绑定为this上下文 - 如果构造函数返回非原始值, 那么返回该值作为结果,否则返回
newInstance
代码分析
function Test() {
this.a = "a";
}
Test.prototype.b = "b";
const test = new Test();
原型链:
test —— __proto__ ——> Test.prototype —— __proto__ ——> Object.prototype —— __proto__ ——> null
new 代码模拟
function mockNew(constructorFn, ...args) {
const newInstance = Object.create(constructorFn.prototype);
const ret = constructorFn.apply(newInstance, args);
return typeof ret === 'object' && ret !== null ? ret : newInstance;
}