- Objective:
- Breadcrumb:
# 概念阐释
## 语义
每次创建一个新实例,JavaScript将调用`constructor()`方法,方法内部的语法就像是模板一样。
## 语法
```
constructor([arguments]) { ... }
```
只写默认参数,有初始值的不写在参数里,get照常。
# 实例
```
class Dog {
constructor(name) {
this.name = name;
this.behavior = 0;//调皮次数
}
}
```
**解释代码**
- `Dog` 为了避免和实例混淆,类的名称用**大写**;
- 当创建新实例时唤醒constructor方法;
- name为参数,可以有多个参数;
- 在类的上下文中,`this`关键字指向该类的一个实例,设置name属性和behavior属性等于`name`参数和0;
### 实例Instance
实例是指包含了属性和方法的对象,但具有唯一的属性值。
```js
const halley = new Dog('Halley');//创建一个名为Halley的实例
console.log(halley.name);//halley变量.name调用Dog类中的的构造方法中的this.name
```
- `new`关键字生成一个Dog类的**新实例**。new关键字**调用**constructor(),运行其中的代码,然后返回新实例。
- 'Halley'是constructor(name)中`name`参数的值
# 相关内容
# 问题
- [constructor 方法](https://www.codecademy.com/journeys/full-stack-engineer/paths/fscj-22-front-end-development/tracks/fscj-22-javascript-syntax-part-iii/modules/wdcp-22-learn-javascript-syntax-classes-8d95f6d1-ff64-43c3-8ff7-cdc933e16fde/lessons/classes/exercises/constructor-method)
- 创建一个名为`Surgeon`的类,包括属性构建方法,参数为name和department;
- [创建类的实例](https://www.codecademy.com/journeys/full-stack-engineer/paths/fscj-22-front-end-development/tracks/fscj-22-javascript-syntax-part-iii/modules/wdcp-22-learn-javascript-syntax-classes-8d95f6d1-ff64-43c3-8ff7-cdc933e16fde/lessons/classes/exercises/instance)
- 创建2个实例,
1. surgeonRomero,姓名:'Francisco Romero',部门:'Cardiovascular';
2. surgeonJackson,姓名:'Ruth Jackson',部门:'Orthopedics'
# 问题答案
```JS
class Surgeon {
constructor(name,department) {
this.name = name;
this.department = department;
}
}
```
```JS
const surgeonRomero = new Surgeon('Francisco Romero','Cardiovascular');
const surgeonJackson = new Surgeon('Ruth Jackson','Orthopedics');
console.log(surgeonJackson.name);
```
# 参考资料
- [构建方法-MDN](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Classes/constructor)