- 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)