js中es6 class类的继承
时间: 2024-05-25 21:15:06 浏览: 169
很高兴回答你的问题。关于JS中ES6 class类的继承,可以通过extends关键字实现类的继承,如下所示:
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + ' makes a noise.');
}
}
class Dog extends Animal {
speak() {
console.log(this.name + ' barks.');
}
}
const d = new Dog('Mitzie');
d.speak();
通过extends关键字,类Dog继承了类Animal的所有属性和方法,并可以在其中覆盖原有的方法。 在上述例子中,类Dog继承了类Animal的构造函数和speak()方法,并重写了speak()方法,实现了bark()动作。请注意,调用super()方法可调用父类构造函数。
相关问题
es6class类语法
ES6(ECMAScript 2015)引入了Class关键字,这是一种简洁的方式来定义JavaScript的类。使用类可以使代码组织更加清晰,更容易理解和维护。以下是ES6 Class的基本语法:
1. **定义类**:
```javascript
class ClassName {
// 成员变量 (实例变量)
instanceVariable = value;
// 构造函数 (构造方法)
constructor(parameters) {
// 实例初始化代码
}
// 成员方法 (成员函数)
method() {
// 方法体
}
// 静态方法 (不绑定到特定实例)
static staticMethod() {
// 静态代码
}
}
```
2. **继承**:
使用`extends`关键字来继承父类,子类可以访问父类的所有成员。
```javascript
class ChildClass extends ParentClass {
// 子类特有的成员或方法
}
```
3. **构造函数的调用**:
通常在创建新实例时会自动调用构造函数,但也可以显式调用。
```javascript
const instance = new ClassName(parameters);
```
4. **原型链**:
ES6 Class默认继承自`Object`,所有的实例共享一个原型。`this`在方法中指向当前实例。
5. **方法和属性的动态绑定**:
类中的方法默认是实例方法,可以通过`static`关键字声明静态方法,`bind`方法可以用于创建具有特定`this`值的新函数。
es6 class类详解
ES6中的class可以让我们更方便地定义类和面向对象的编程模式。下面是一些关于ES6 class的详细解释:
1. 定义类
使用class关键字定义一个类,类名通常首字母大写。例如:
```
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
}
}
```
上面的代码定义了一个Person类,包含一个构造函数和一个sayHello方法。
2. 构造函数
类中的构造函数使用constructor关键字定义,用于初始化对象的属性。例如:
```
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
```
上面的代码定义了一个Person类,包含一个构造函数,构造函数接收name和age两个参数,并将其分别赋值给对象的name和age属性。
3. 方法
类中的方法可以像普通函数一样定义,例如:
```
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
}
}
```
上面的代码定义了一个Person类,包含一个sayHello方法,该方法用于打印对象的name和age属性。
4. 继承
ES6中的class支持继承,使用extends关键字实现继承。例如:
```
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}.`);
}
}
```
上面的代码定义了一个Student类,该类继承自Person类,包含一个构造函数和一个study方法。构造函数接收name、age和grade三个参数,其中name和age由父类的构造函数初始化,grade由子类的构造函数初始化。
5. 静态方法
类中的静态方法使用static关键字定义,可以直接通过类名调用,例如:
```
class MathUtils {
static add(x, y) {
return x + y;
}
static subtract(x, y) {
return x - y;
}
}
```
上面的代码定义了一个MathUtils类,包含两个静态方法add和subtract,这两个方法可以直接通过类名调用。
6. 属性
ES6中的class支持定义属性,可以使用get和set关键字定义属性的读写方法。例如:
```
class Person {
constructor(name, age) {
this._name = name;
this._age = age;
}
get name() {
return this._name;
}
set name(name) {
this._name = name;
}
get age() {
return this._age;
}
set age(age) {
this._age = age;
}
}
```
上面的代码定义了一个Person类,包含两个属性name和age,这两个属性的读写方法分别由get和set关键字定义。注意,属性名前面加上了一个下划线,这是一种约定俗成的做法,用于表示私有属性,防止属性被直接访问。
7. 静态属性
ES6中的class支持定义静态属性,使用static关键字定义静态属性。例如:
```
class MyClass {
static myStaticProperty = 42;
}
```
上面的代码定义了一个MyClass类,包含一个静态属性myStaticProperty,该属性的初始值为42。
总结:
ES6中的class为JavaScript提供了更加完整和规范的面向对象编程模式,支持继承、静态方法、属性等等。使用class可以让我们更方便地定义类和对象,提高代码的可读性和维护性。
阅读全文