JavaScript之继承?
编辑
15
2024-12-18
什么是继承?
继承是面向对象编程中的一个概念,它允许我们创建一个基于另一个类的新类。新类(子类)继承了父类的属性和方法,并且可以添加或修改这些属性和方法。
什么是 super
?
super
是一个关键字,用于访问和调用父类的函数。在子类的构造函数中,super()
调用父类的构造函数。在子类的方法中,super.methodName()
调用父类的 methodName
方法。
为什么要用 super
?
初始化父类的属性:父类的构造函数通常用于初始化父类的属性。如果子类没有调用父类的构造函数,父类的属性就不会被初始化,可能会导致错误。
使用父类的方法:子类可以调用父类的方法,并在此基础上添加新的行为。
例子
假设我们有一个 Animal
类,它有一个构造函数来设置动物的名字:
class Animal {
constructor(name) {
this.name = name;
}
}
现在,我们想要创建一个 Dog
类,它继承自 Animal
:
class Dog extends Animal {
constructor(name, breed) {
super(name); // 调用父类的构造函数,设置名字
this.breed = breed; // 设置狗的品种
}
}
在这个例子中,Dog
类的构造函数接受两个参数:name
和 breed
。我们使用 super(name)
来调用 Animal
类的构造函数,这样我们就可以设置 Dog
的 name
属性。然后,我们设置 Dog
特有的属性 breed
。
如果我们不使用 super(name)
,那么 Dog
的 name
属性就不会被设置,因为 Animal
类的构造函数没有被调用。
为什么不能直接这样写?
class Cat extends Animal {
constructor() {
this.age = age;
}
}
在这个例子中,你尝试直接在 Cat
的构造函数中给 this.age
赋值,但是没有调用 super()
。这样做会导致错误,因为:
JavaScript 要求在访问
this
之前必须调用super()
。没有调用
Animal
类的构造函数,所以Animal
类中定义的属性(如name
)不会被初始化。
总结
super
关键字是 JavaScript 中实现继承的重要工具。它确保父类的构造函数被正确地调用,以便初始化继承的属性,并且它允许子类调用父类的方法。
- 0
- 0
-
分享