购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3 class类继承

1.2节通过extends关键字实现了一个类继承另一个类的属性和方法。本节将详细讲解class类中的继承。继承是面向对象编程中非常重要的概念,它使得我们可以在一个类中直接使用另一个类的属性和方法。在讲解继承的过程中,我们将重点介绍三个方面的内容:属性继承、方法继承以及创建类的私有属性和方法。这些内容将帮助读者更好地理解和应用继承的概念,提升编程能力。

1.3.1 属性继承

本节内容将重点介绍属性继承的实现。在面向对象的编程中,属性继承是一种强大的机制,它支持子类继承父类的属性,使得代码更加灵活和可复用。

在属性继承的过程中,子类会继承父类的所有属性。这意味着,子类可以像父类一样使用这些属性,而不需要重新定义。这大大简化了代码的编写和维护过程,减少了重复劳动。

以下代码是创建一个父类的示例。

```javascript
class Person {
   constructor(name, age) {
      this.name = name;
      this.age = age;
   }
}
const tom = new Person("Tom", 25);
console.log("tom")
```

【代码解析】

上述代码创建了一个Person父类,并且在父类中有name和age这两个属性,接下来我们再创建一个student类,使student类继承于Person类。

继承的语法是使用extends关键字实现,语法如下。

class 子类名 extends 父类

根据继承语法创建student类,示例代码如下。

```javascript
class Student extends Person {
   constructor(name, age) {
      super(name, age);
   }

}
const jerry = new Student("Jerry", 18);
console.log(jerry)
```

【代码解析】

上述代码中,constructor()方法是Student自身的构造器,用于接收在new Student()过程中传入的name和age属性。

在继承的过程中,constructor()方法里面必须调用super()方法,这里的super()表示调用父类的constructor()方法。

上述代码中的super()表示调用父类Person中的constructor(),父类中的constructor()方法同样需要接收name和age参数,最终实现属性继承。

1.3.2 方法继承

本节将专注讨论如何在ES6中实现类方法的继承。通过学习这一部分的内容,你将能够全面了解ES6中class类的继承机制。本节内容将逐步引导你学习继承方法的基本概念和实现步骤,帮助你快速掌握这一重要的编程技巧。

接下来我们将在Person父类中,新增一个sayHello()方法,示例代码如下。

```javascript
class Person {
   constructor(name, age) {
      this.name = name;
      this.age = age;
   }
   sayHello() {
      console.log(`Hello, my name is ${this.name} and I am ${this.age} years
old.`);
   }
}
```

Student子类通过extends关键字实现继承之后,可直接使用父类中的方法,示例代码如下。

```javascript
class Student extends Person {
   constructor(name, age) {
      super(name, age);
   }
}
const jerry = new Student("Jerry", 18);
jerry.sayHello(); // 输出:Hello, my name is Jerry and I am 18 years old.
```

继承方法相对来说较为简单,通过子类的实例对象直接调用父类中的方法即可。

无论是开发大型项目还是个人独立开发,掌握类方法的继承都能极大地提高编码工作的便利性和效率。

1.3.3 创建类的私有属性和方法

本节将详细讲解JavaScript继承中创建类的私有属性和方法。通过阅读本节内容,你将学习如何在JavaScript中实现类的继承,并创建属于类自身的私有属性和方法。这对于提高代码的封装性和重用性非常有帮助。通过本节的学习,相信你将对JavaScript继承的概念有更深入的理解,并能够灵活运用于自己的项目中。

接下来,我们在Student子类中定义私有属性grade和私有方法study(),示例代码如下。

```javascript
class Student extends Person {
   constructor(name, age, grade) {
      super(name, age);
      this.grade = grade;
   }
   study() {
      console.log(`${this.name} is studying in grade ${this.grade}.`);
   }
}
const jerry = new Student("Jerry", 18, "6th");
jerry.sayHello();  // 输出:Hello, my name is Jerry and I am 18 years old.
jerry.study();     // 输出:Jerry is studying in grade 6th.
```

【代码解析】

jerry.sayHello()是继承父类Person中的方法,输出的是姓名和年龄,而jerry.study()是Student子类私有方法,输出的是姓名和年级。

注意,在子类的constructor()构造器中,name和age这两个参数用于继承父类,而grade参数是Student子类的私有属性。

在挂载私有属性的子类中,需要注意一个语法规则,私有属性必须在super()函数之后初始化。这是一个关键的语法规则,帮助我们确保私有属性的正确使用。 m3NdZDB9y63KYG+m+tl+a3n4xaBpgyrUIURRrS2Sm3UKUOFVBqcN3dhJ/Pt4yPTb

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开