JavaScript 类的继承怎么写

想搞懂JavaScript里的类继承,其实不用怕复杂的概念,咱们用生活里的例子慢慢拆。

先搞懂“继承”是啥

你肯定见过家里长辈传下来的东西吧?比如妈妈的围巾,你戴的时候不用再从头织,直接用就行,甚至还能改个小装饰,但核心还是那条围巾。JavaScript里的类继承,逻辑完全一样——就是让一个“新类”直接用上另一个“老类”的所有功能,还能加自己的新功能,不用反复写重复代码。

JavaScript 类的继承怎么写

举个日常例子,老类可以是“动物”,它有所有动物都有的属性(比如年龄)和方法(比如吃饭);新类可以是“猫”,它不用再写“吃饭”,直接用动物的功能,还能加自己的“抓老鼠”方法,这就是继承的好处。

用最简单的方式写继承

JS里实现继承,现在最常用的是extends关键字,就像给新类贴个“我要继承老类”的标签,代码超直白。

先写老类“动物”,就像一个基础模板:

`js

// 老类(父类):动物

class Animal {

// 初始化属性

constructor(age) {

this.age = age;

}

// 所有动物都有的方法

eat() {

console.log("我在吃饭");

}

}

`

现在要写新类“猫”,用extends继承Animal,这样猫就自动有了age属性和eat方法:

`js

// 新类(子类):猫,继承动物

class Cat extends Animal {

// 子类可以加自己的新方法,不用重复写

catchMouse() {

console.log("我在抓老鼠");

}

}

`

用的时候直接创建猫的实例,不用管动物的代码,直接用就行:

`js

const myCat = new Cat(2); // 给猫设年龄2岁

myCat.eat(); // 输出“我在吃饭”——直接用了父类的方法

myCat.catchMouse(); // 输出“我在抓老鼠”——子类自己的方法

`

进阶:子类改父类的功能

有时候猫的吃饭方式和动物不一样,比如动物是“吃 generic 食物”,猫是“吃猫粮”,这时候不用改父类,直接在子类里“重写”方法就行。

代码加个小改动:

`js

class Cat extends Animal {

// 重写父类的eat方法

eat() {

console.log("我在吃猫粮");

}

catchMouse() {

console.log("我在抓老鼠");

}

}

`

现在再调用myCat.eat(),就会输出“我在吃猫粮”,子类的修改直接生效,父类的功能不会被破坏,这就是继承的灵活性。

还有个小细节:如果子类自己加了属性,比如“猫的品种”,初始化的时候要先调用父类的构造函数,不然会报错,就像你用妈妈的围巾,得先确认妈妈的围巾是完整的,再往上加装饰——用super()就能做到,它就是调用父类的构造函数:

`js

class Cat extends Animal {

constructor(age, breed) {

// 先调用父类的构造,拿到age属性

super(age);

// 再给子类加自己的属性

this.breed = breed;

}

eat() {

console.log("我在吃猫粮");

}

catchMouse() {

console.log("我在抓老鼠");

}

}

// 创建一只2岁的英短猫

const myCat = new Cat(2, "英短");

console.log(myCat.age); // 2——来自父类

console.log(myCat.breed); // 英短——子类自己的属性

`

这样是不是就清楚了?简单来说,JS类的继承就是用extends让子类复用父类的代码,还能改功能加新功能,不用反复写重复代码,就像用现成模板改自己的东西一样方便。

上一篇 Swift语言的核心特性与日常开发中的实用场景科普