Skip to content

对象的创建

使用 new 关键字创建对象

发生了什么?

  1. 创建一个空的简单的 JavaScript 对象({})
  2. 为创建好的这个对象添加属性 __proto__,指向构造函数的原型对象
  3. this 上下文环境指向刚刚创建的对象调用构造函数
  4. 执行构造函数中的代码
  5. 如果该函数没有返回一个对象,则返回我们创建的这个对象

为什么这样做

我们可以将前三步看成是默认行为,第四步相当于为用户提供了自定义 new 关键字的接口。 不管是默认行为还是用户自定义行为,都是为了生成并返回一个对象。

第一步创建一个空的对象,作为默认行为要返回的对象。

第二步操作的目的是为了这个对象能够共享构造函数的原型对象。

javascript
const person = new Person();
// 这样的话 person 作为 Person 实例,能够访问到 Person 的原型对象上的属性和方法。

第三步操作的目的是构造函数要执行一次,比如很多时候构造函数会为 this 添加一些属性。

javascript
function Person(name) {
  this.name = name;
}

不加括号的情况

使用 new 关键字调用构造函数,没有加括号new Person相当于new Person(),也就是不带任何参数调用的情况。

当我们想要为构造函数传递参数时,则必须添加括号,将参数填入括号内部,如new Person('John', 24)