首页 > 编程笔记 > JavaScript笔记 阅读:2

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 类,示例代码如下:
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 参数,最终实现属性继承。

方法继承

接下来我们在前面创建的 Person 父类中,新增一个 sayHello() 方法,示例代码如下:
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 关键字实现继承之后,可直接使用父类中的方法,示例代码如下:
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.
继承方法相对来说较为简单,通过子类的实例对象直接调用父类中的方法即可。

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

创建类的私有属性和方法

接下来,我们在 Student 子类中定义私有属性 grade 和私有方法 study(),示例代码如下:
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() 函数之后初始化。这是一个关键的语法规则,帮助我们确保私有属性的正确使用。

相关文章