1. new 一个构造函数的过程:
【1】创建一个空对象
【2】空对象的 [[ prototype ]] 指向 构造函数的 prototype
【3】将 this 指向新对象
【4】执行构造函数内部代码,给新对象添加属性
【5】返回新对象
2. 手写 new:
function Dog(name) { this.name = name; } Dog.prototype.say = function () { console.log("Wang!") }; function myNew(object, ...args) { // 创建一个新对象, 并将其[[prototype]]指向构造函数的原型对象 let o = Object.create(object.prototype); // 改变this指向,给新对象添加属性 let new_o = object.apply(o, args); return new_o instanceof Object ? new_o : o; } let newDog = myNew(Dog, 'Andy'); console.log(newDog.name); // Andy