理解JavaScript继承

理解继承可以从一个更简单的角度来解释。继承允许我们创建新的类或对象,这些类或对象可以继承另一个类或对象的属性和方法,而不用重复定义这些属性和方法。

举一个简单的现实生活的例子:

假设我们有一个 Animal 类,表示所有的动物。每种动物都有一些共有的特性,比如 nameage,并且它们可以做一些事情,比如 eat。现在,我们想创建一个 Dog 类,狗也是一种动物,所以我们不需要重新定义这些共同的属性和方法,而是通过继承来复用。

代码示例

父类:Animal
// 定义一个Animal类(父类)
class Animal {
  constructor(name, age) {
    this.name = name; // 动物的名字
    this.age = age;   // 动物的年龄
  }

  eat() {
    console.log(this.name + ' is eating.');
  }
}

在这里,Animal 类有两个属性 nameage,还有一个方法 eat(),所有的动物都有这些属性和方法。

子类:Dog 类继承 Animal
// 定义一个Dog类(子类),继承Animal类
class Dog extends Animal {
  constructor(name, age, breed) {
    super(name, age); // 调用父类的构造函数,传入name和age
    this.breed = breed; // 狗特有的属性:品种
  }

  bark() {
    console.log(this.name + ' is barking.');
  }
}
  • class Dog extends AnimalDog 类继承了 Animal 类,这意味着 Dog 类会自动拥有 Animal 类的所有属性和方法。
  • super(name, age):在子类的构造函数中,使用 super() 来调用父类的构造函数,初始化父类的 nameage 属性。
  • 子类 Dog 有一个额外的属性 breed(狗的品种),以及一个方法 bark()(狗叫)。
使用子类和父类
const dog = new Dog('Buddy', 3, 'Golden Retriever');
console.log(dog.name); // 输出 'Buddy'
console.log(dog.age);  // 输出 3
console.log(dog.breed); // 输出 'Golden Retriever'

dog.eat();  // 调用父类的eat方法,输出 'Buddy is eating.'
dog.bark(); // 调用子类的bark方法,输出 'Buddy is barking.'

理解继承可以从一个更简单的角度来解释。继承允许我们创建新的类或对象,这些类或对象可以继承另一个类或对象的属性和方法,而不用重复定义这些属性和方法。

举一个简单的现实生活的例子:

假设我们有一个 Animal 类,表示所有的动物。每种动物都有一些共有的特性,比如 nameage,并且它们可以做一些事情,比如 eat。现在,我们想创建一个 Dog 类,狗也是一种动物,所以我们不需要重新定义这些共同的属性和方法,而是通过继承来复用。

代码示例

父类:Animal
 

js

复制代码

// 定义一个Animal类(父类) class Animal { constructor(name, age) { this.name = name; // 动物的名字 this.age = age; // 动物的年龄 } eat() { console.log(this.name + ' is eating.'); } }

在这里,Animal 类有两个属性 nameage,还有一个方法 eat(),所有的动物都有这些属性和方法。

子类:Dog 类继承 Animal
 

js

复制代码

// 定义一个Dog类(子类),继承Animal类 class Dog extends Animal { constructor(name, age, breed) { super(name, age); // 调用父类的构造函数,传入name和age this.breed = breed; // 狗特有的属性:品种 } bark() { console.log(this.name + ' is barking.'); } }

  • class Dog extends AnimalDog 类继承了 Animal 类,这意味着 Dog 类会自动拥有 Animal 类的所有属性和方法。
  • super(name, age):在子类的构造函数中,使用 super() 来调用父类的构造函数,初始化父类的 nameage 属性。
  • 子类 Dog 有一个额外的属性 breed(狗的品种),以及一个方法 bark()(狗叫)。
使用子类和父类
 

js

复制代码

const dog = new Dog('Buddy', 3, 'Golden Retriever'); console.log(dog.name); // 输出 'Buddy' console.log(dog.age); // 输出 3 console.log(dog.breed); // 输出 'Golden Retriever' dog.eat(); // 调用父类的eat方法,输出 'Buddy is eating.' dog.bark(); // 调用子类的bark方法,输出 'Buddy is barking.'

继承的作用:

  1. 代码复用Dog 类不需要重新定义 nameageeat(),因为它继承了 Animal 类的这些属性和方法。
  2. 扩展父类功能Dog 类可以在继承的基础上,定义自己的特有方法 bark() 和属性 breed,扩展了父类的功能。

总结:

  • 继承让我们可以创建子类,并从父类继承属性和方法,从而避免重复代码。
  • 子类可以调用父类的构造函数(super()),来初始化父类的属性。
  • 子类也可以定义自己的方法和属性,增加新的功能。

通过这个例子,Dog 类继承了 Animal 类的属性和方法,而同时又增加了狗的特有行为,这就是继承的基本原理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值