用通俗的语言解释ES6 Class继承类的定义与用法
2023-11-08 14:01:37
ES6中Class继承类的定义和用法
ES6的Class继承类是一种基于原型的继承机制,允许创建新的类来扩展或修改现有类的功能。ES6中的Class继承类相比于ES5中的继承具有更加清晰和简洁的语法,并且可以更好地控制类的访问权限。
1. 定义Class继承类
在ES6中定义一个Class继承类需要使用extends
,该关键字用于指定新的类要继承的父类。例如,以下代码定义了一个名为Dog
的类,该类继承了名为Animal
的父类:
class Dog extends Animal {
constructor(name) {
super(name);
}
bark() {
console.log("Woof!");
}
}
在上面的代码中,Dog
类继承了Animal
类的属性和方法,并且还定义了一个名为bark()
的新方法,该方法用于让狗吠叫。
2. 实例化Class继承类
要实例化一个Class继承类,可以使用new
关键字,例如:
const dog = new Dog("Buddy");
上面的代码创建了一个名为dog
的新对象,该对象是Dog
类的实例。
3. 访问Class继承类的属性和方法
可以像访问普通对象一样访问Class继承类的属性和方法,例如:
dog.name; // "Buddy"
dog.bark(); // "Woof!"
4. Class继承类的访问权限
在ES6中,Class继承类的访问权限可以使用public
、protected
和private
三个关键字来控制。public
关键字表示该属性或方法可以在类的任何地方访问,protected
关键字表示该属性或方法只能在类的内部以及继承该类的子类中访问,private
关键字表示该属性或方法只能在类的内部访问。
例如,以下代码定义了一个名为Animal
的父类,该类有一个名为name
的属性和一个名为eat()
的方法,这两个属性和方法都使用public
关键字修饰,这意味着它们可以在类的任何地方访问:
class Animal {
constructor(name) {
this.name = name;
}
eat() {
console.log("Eating...");
}
}
以下代码定义了一个名为Dog
的子类,该子类继承了Animal
父类的属性和方法,并且还定义了一个名为bark()
的新方法,该方法使用public
关键字修饰,这意味着它可以在类的任何地方访问:
class Dog extends Animal {
constructor(name) {
super(name);
}
bark() {
console.log("Woof!");
}
}
5. Class继承类的多态性
在ES6中,Class继承类具有多态性的特点,这意味着子类的实例可以被父类类型的变量引用。例如,以下代码定义了一个名为animals
的数组,该数组可以存储任何类型的动物,包括Animal
类和Dog
子类:
const animals = [
new Animal("Lion"),
new Dog("Buddy"),
new Animal("Tiger")
];
上面的代码可以像访问普通数组一样访问animals
数组,例如:
animals[0].name; // "Lion"
animals[1].bark(); // "Woof!"
animals[2].eat(); // "Eating..."
总结
ES6中的Class继承类是一种基于原型的继承机制,允许创建新的类来扩展或修改现有类的功能。ES6中的Class继承类相比于ES5中的继承具有更加清晰和简洁的语法,并且可以更好地控制类的访问权限。Class继承类的定义和用法与JavaScript中的其他类相似,但也有自己的特点,例如,Class继承类可以使用访问权限关键字来控制属性和方法的访问范围,并且Class继承类具有多态性的特点。