JS中的class

在 JavaScript 中,class 是用于定义对象的模板的一种语法糖。class 关键字是 ECMAScript 6(ES6)引入的,使得面向对象编程在 JavaScript 中变得更加直观和结构化。

基本用法

1. 定义一个类

使用 class 关键字定义一个类,类中通常包含构造函数 (constructor),以及其他方法和属性。 

class Person {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }

    greet() {
        console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
    }
}

 创建类的实例 

使用 new 关键字创建一个类的实例。

const person1 = new Person("Alice", 30);
const person2 = new Person("Bob", 25);

person1.greet(); // 输出: Hello, my name is Alice and I am 30 years old.
person2.greet(); // 输出: Hello, my name is Bob and I am 25 years old.

类的继承

class 关键字也支持继承,允许一个类继承另一个类的属性和方法。使用 extends 关键字实现继承。

class Animal {
    constructor(name) {
        this.name = name;
    }

    speak() {
        console.log(`${this.name} makes a noise.`);
    }
}

class Dog extends Animal {
    constructor(name, breed) {
        super(name); // 调用父类的构造函数
        this.breed = breed;
    }

    speak() {
        console.log(`${this.name} barks.`);
    }
}

const dog = new Dog("Rex", "Golden Retriever");
dog.speak(); // 输出: Rex barks.

在这个例子中,Dog 类继承了 Animal 类,并且重写了 speak() 方法。super 关键字用于调用父类的构造函数或方法。

静态方法

使用 static 关键字定义静态方法,静态方法属于类本身,而不是类的实例。

class MathUtility {
    static add(a, b) {
        return a + b;
    }
}

console.log(MathUtility.add(5, 3)); // 输出: 8

MathUtility 类中的 add() 方法是静态方法,可以直接通过类名调用,而不需要创建实例。

 私有字段和方法

ES2022 引入了类的私有字段和方法,使用 # 前缀定义。私有字段和方法只能在类的内部访问,外部无法直接访问。

class Person {
    #socialSecurityNumber;

    constructor(name, ssn) {
        this.name = name;
        this.#socialSecurityNumber = ssn;
    }

    getSSN() {
        return this.#socialSecurityNumber;
    }
}

const person = new Person("Alice", "123-45-6789");
console.log(person.getSSN()); // 输出: 123-45-6789
console.log(person.#socialSecurityNumber); // 报错: Uncaught SyntaxError: Private field '#socialSecurityNumber' must be declared in an enclosing class

在这个例子中,#socialSecurityNumber 是一个私有字段,不能在类的外部直接访问,只能通过类内部的方法访问。

组织代码结构:class 使代码更具模块化和组织性,特别是在大型项目中。

继承与多态:通过类的继承,可以复用代码,并实现多态性。

封装:类提供了将数据和方法封装在一起的能力,允许创建更安全和可靠的代码。

class计数器

 class Counter {
    constructor() {
        this.count = 0;
    }

    increment() {
        this.count += 1;
        console.log(`Count: ${this.count}`);
    }

    decrement() {
        this.count -= 1;
        console.log(`Count: ${this.count}`);
    }
}

const counter = new Counter();
counter.increment(); // 输出: Count: 1
counter.increment(); // 输出: Count: 2
counter.decrement(); // 输出: Count: 1

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值