Appearance
对象的创建
使用 new
关键字创建对象
发生了什么?
- 创建一个空的简单的 JavaScript 对象({})
- 为创建好的这个对象添加属性
__proto__
,指向构造函数的原型对象 - 将
this
上下文环境指向刚刚创建的对象调用构造函数 - 执行构造函数中的代码
- 如果该函数没有返回一个对象,则返回我们创建的这个对象
为什么这样做
我们可以将前三步看成是默认行为,第四步相当于为用户提供了自定义 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)
。