JavaScript中,new之后,干了什么?

61 阅读1分钟

一、new

在JavaScript中,new事一个关键字,用于创建实例对象,通常与构造函数一起使用,表示要实例化一个对象

二、new过程包含的主要步骤

  1. 创建一个新的空对象。
  2. 将构造函数的作用域赋给新对象,使 this 关键字指向这个新对象。
  3. 执行构造函数内部的代码,进行对象的初始化和属性赋值等操作。
  4. 如果构造函数内部没有显式返回其他对象,则隐式返回刚刚创建的新对象;如果构造函数内部有显式返回其他对象,则返回这个对象。

三、示例

1、当构造函数没有显示返回其他对象

function Person(name, age) {
  // 步骤2:this 指向新对象
  // 步骤3:对新对象进行初始化
  this.name = name;
  this.age = age;
}

// 使用 new 关键字创建实例
const person1 = new Person('John', 30);

console.log(person1); // { name: 'John', age: 30 }

示例中,首先创建新的Person对象,并通过this将值负值给对象,完成新对象的初始化,在Person中,可以看见,并没有显示的返回一个指定的对象,所以此处会返回刚才创建的新对象,即person对象{ name:'John' , age : '30' };

2、显示的返回一个新的对象

function Person(name, age) {
  this.name = name;
  this.age = age;
  return { custom: 'Custom Object' };
}

const person1 = new Person('John', 30);

console.log(person1); // { custom: 'Custom Object' }

可以看见,Person 构造函数内部创建了一个新对象并为其添加属性,但由于构造函数显式返回了一个不同的对象,因此 person1 最终的值是这个返回的对象,而不是构造函数内部创建的对象。