构造函数
构造函数就是用于创建对象的函数。用函数创建对象,可以减少繁琐的对象创建流程。
构造函数的调用:new <构造函数名>(...);
- 构造函数的其他特点
函数名通常使用大驼峰命名法。构造函数的命名尽量不要出现 v.(动词),因为关键字 new
表示“创建”,已经有一个动词了。
示例:
// 比如要定义一个用于创建用户对象的构造函数
function User() { // 不要命名为:CreateUser
// => ...
}
const user_a = new User();
// => ...
构造函数的返回值是一个对象。
- 构造函数的内部原理
构造函数内部,会自动创建一个新对象,this 指向新创建的对象,并且自动返回新对象。
function User() {
// this = {}
// this.xxx = xxx;
// => ...
// return this;
}
构造函数和普通函数,其实没有啥本质上的却别,它们的区别在于调用方式上,我们在调用一个构造函数的时候,通常会在调用时,加上关键字 new。
一旦我们在调用一个函数时,加上了关键字 new,那么,我们可以简单的理解为,在调用该函数时,它自动地在函数的最前面加上了一行 this = {};
,并在函数的最后一行加上了 return this;
。虽然这么理解并不准确,因为关键字 this 是无法被赋值的,但是,这么理解更直观。
- 细节问题
构造函数中如果出现返回值,如果返回的是原始类型,则直接忽略;如果返回的是引用类型,则使用返回的结果。
所有的对象,最终其实都是通过构造函数创建的。
如何判断函数是正常调用还是通过关键字 new 来调用
new.target
该表达式在函数中使用,返回的是当前的构造函数。但是,如果该函数不是通过关键字 new 调用的话,则返回 undefined。
通常用于判断某个函数是否是通过 new 在调用。