场景:
我们经常需要创建很多类似的对象,例如多个用户或菜单项等。这可以使用构造函数和 "new"
操作符来实现。
构造函数:
构造函数在技术层面上来说也是一种常规函数,只不过在使用过程中有两个约定:
- 构造函数的命名通常是大写字母开头;
- 构造函数只能通过new关键字来执行;
function User(name) {
this.name = name;
this.isAdmin = false;
}
let user = new User("Tom");
alert(user.name); // Tom
alert(user.isAdmin); // false
那么当我们使用new关键字的时候都都经历了哪些步骤呢?
- 首先会创建一个js空对象(即{...});
- 为创建的对象添加隐式原型属性(即__proto__),将该属性添加至构造函数的原型对象(prototype属性);
- 将创建的对象作为this的上下文;
- 如果该函数没有返回对象,则返回this。
注意:new关键字后面的构造函数不能是箭头函数——(详情查询this指向文章)
注意,new
操作符与直接调用是不同的,以函数的方式直接调用的时候,this
指向 window
,new
创建的时候,this
指向创建的这个实例