JavaScript类的使用全解

JavaScript类的使用全解

一、类的概念

具有相似属性和行为的事物。比如: 人(女人、男人、小孩),动物(狗、猫,牛...)等等。

二、类的使用

1.语法

// 类名首字母一般大写

class 类名 {

• // 构造函数

constructor() {

• }

}

2.实例

注意: 在类中的 this 指向的是 实例 本身,而静态属性和方法,是属于类的,不是属于某个实例。

class Animal {

// 构造函数

constructor(name) {

this.name = name; // 实例属性

}

static age = 1; // 静态属性 只能通过类名进行引用

#color = '黄色'; // 私有属性

// 普通方法

call(value) {

console.log(`${this.name}动物在${value}叫,它是一只${this.#color}动物`);

}

// 静态方法 只能通过类名进行调用

static getAge() {

// 静态方法内部不能使用 this 来访问实例属性或实例方法。 因为静态方法没有和任何具体的实例绑定。

console.log('我是Animal类的静态方法,我的静态属性是',Animal.age);

}

// 私有方法

#motion() {

console.log(`${this.name}在运动`);

}

}

// 实例化

const dog = new Animal('可乐'); // 通过给构造函数传值,直接给dog实例属性 name 赋值为 ’可乐‘

// 访问普通方法

console.log(dog.call('汪汪汪'));

// 访问静态属性 和 静态方法

console.log(Animal.age, Animal.getAge());

三、类的属性

JavaScript中的类的属性有:实例属性、静态属性、私有属性

1.实例属性

定义在构造函数 constructor 的this上,通过【实例名.属性名】访问。

2.静态属性

使用 static 关键子进行定义,通过【类名.静态属性名】访问。

3.私有属性

通过 #属性名 进行定义,只能在类 内部访问,通过【this.#属性名】访问。

四、类的方法

JavaScript中的类的方法有:构造方法、普通方法、静态方法、私有方法。

1.构造方法

名为constructor()的方法;

用于初始化实例对象的属性;

使用 new 关键字实例化时,自动调用;

定义类时,若没有定义constructor 方法,JavaScript 会自动声明一个空的constructor方法;

2.普通方法

与实例对象关联,实例对象可直接调用;

可以访问实例属性和其他实例方法;

必须先创建实例,再进行调用;

普通方法实际上是定义在 类的 原型 上的方法,所有实例对象 共享 普通方法;

当有继承关系时,子类可重写普通方法;

3.静态方法

属于类而不是实例;

无法访问实例属性和实例方法;

可以访问静态属性和静态方法;

有继承关系时,可重写静态方法;

通常用于提供工具性和通用功能,如格式化工具;

4.私有方法

只能在类 内部进行调用;

五、继承

1.单继承

一个子类只能继承一个父类。这是 JavaScript 中类继承的常见形式。在这种继承方式下,子类会继承父类的属性和方法,并可以根据需要进行扩展或重写。例如:

class Animal {

constructor(name) {

this.name = name;

}

makeSound() {

console.log('Animal sound');

}

}

class Dog extends Animal {

constructor(name) {

super(name);

}

makeSound() {

console.log('Woof!');

}

}

let dog = new Dog('Buddy');

dog.makeSound(); // 输出 "Woof!",子类重写了父类的makeSound方法

2.组合继承

组合继承是指在一个类中包含其他类的实例,从而复用其他类的功能。例如:

class Flyable {

fly() {

console.log('Flying');

}

}

class Swimmable {

swim() {

console.log('Swimming');

}

}

class Duck {

constructor() {

// 创建其他类的实例 为当前类的属性

this.flyable = new Flyable();

this.swimmable = new Swimmable();

}

fly() {

// 在当前类的方法中,调用实例属性的方法

this.flyable.fly();

}

swim() {

// 在当前类的方法中,调用实例属性的方法

this.swimmable.swim();

}

}

let duck = new Duck();

duck.fly(); // 输出 "Flying"

duck.swim(); // 输出 "Swimming"

3.多级继承

多级继承是指一个类继承自另一个类,而这个父类又继承自其他类,形成一个继承链。例如:

class Organism {

constructor(living) {

this.living = living;

}

}

class Animal extends Organism {

constructor(living, name) {

super(living); // 调用父类的构造方法

this.name = name;

}

makeSound() {

console.log('Animal sound');

}

}

class Mammal extends Animal {

constructor(living, name, hasFur) {

super(living, name);

this.hasFur = hasFur;

}

}

let mammal = new Mammal(true, 'Lion', true);

console.log(mammal.name); // 输出 "Lion"

mammal.makeSound(); // 输出 "Animal sound"

六、super的使用

super关键字用于调用父类的属性和方法;

在调用时,需要指定调用的父类属性或父类方法;

super必须写在this.XXX之前;

// 调用父类的构造方法

super();

// 访问父类属性

super.属性;

// 调用父类方法

super.方法名();

🌸 相关推荐 🌸

圣光军团声望怎么刷
365安卓版

圣光军团声望怎么刷

📅 08-18 👀 8766
光纤线多少钱一米 光纤线多久换一次 光纤线需要多长时间更换一次?
彻底弄懂 Http 缓存机制
365bet中文体育在线

彻底弄懂 Http 缓存机制

📅 07-12 👀 6993