参考链接:https://juejin.cn/post/6894401976809816077
前言
new操作符到底有何作用,可以先看一道面试题和参考答案
new操作符作用
1、创建一个空对象
2、由this变量引用该对象
3、该对象继承该函数的原型
4、把构造函数的属性和方法添加到这个对象中
5、返回这个新对象
构造函数
构造函数两个特点
- 大写字母开头(大驼峰命名)
- 用
new
调用
当一个函数使用new 操作符执行时,它按照以下步骤:
1、一个新的空对象被创建并分配给this
2、函数体执行。通常会修改this,为其添加新的属性
3、返回this的值
所以new User(…)做的就是类似的事情:
function User(name) {
// this = {};(隐式创建)
// 添加属性到 this
this.name = name;
this.isAdmin = false;
// return this;(隐式返回)
}
构造函数的主要目的——实现可重用的对象创建代码。
构造器的return
一般构造函数是没有return 语句的,因为当通过new 调用构造函数创建对象时会隐式返回内部this;
那如果有return语句,就会出现下面了两种情况:
- 如果return一个对象,则代替this,返回该对象而非this
- 如果return返回一个原始类型,则忽略掉
这里return一个对象可以覆盖函数内的this
function BigUser() {
this.name = "John";
return { name: "Godzilla" }; // <-- 返回这个对象
}
alert( new BigUser().name ); // Godzilla,得到了那个对象
通常构造器没有 return
语句。这里我们主要为了完整性而提及返回对象的特殊行为。
总结
- 构造函数就是常规函数,命名要首字母大写
- 只能使用new来调用。这意味着在开始时创建了空的this,并在最后返回填充了值的this