在进行 new 构造函数时,this 的指向经历了以下四次变化:

  1. 创建一个空对象:在使用 new 关键字调用构造函数时,会创建一个空对象,这个空对象被赋值给 this。
  2. 继承原型链:新创建的空对象会被设置 [[Prototype]](即 __proto__)链接到构造函数的原型对象上。
  3. 执行构造函数:构造函数会被执行,其中的 this 引用当前正在创建的对象。因此,构造函数中对 this 的属性和方法的设置都会作用于当前的对象。
  4. 返回新对象:如果构造函数中没有显式返回其他对象,那么 new 表达式会隐式地返回这个新创建的对象。

总结起来,this 的指向在 new 构造函数时经历的四次变化如下:

  1. 在构造函数内部,this 指向新创建的空对象。
  2. 通过原型链继承,this 的 [[Prototype]](即 __proto__)链接到构造函数的原型对象上。
  3. 在构造函数内部,this 被用于进行属性和方法的设置,这些设置会作用于当前的对象。
  4. 如果构造函数没有显式地返回其他对象,则 new 表达式隐式地返回新创建的对象。

需要注意的是,使用箭头函数作为构造函数时,不会创建新对象,而是使用父作用域中的 this。