知道 ES6 的 Class 嘛?

引言

如果大家学习过c++的话,class想必大家就听着很耳熟了,因为C++中就是使用关键字 class 来定义类,从而实现面向对象编程,那它和我们今天的内容有什么联系呢?

在ES6中JavaScript引入了Class关键字,没错,它就是为了面向对象编程而准备的,Class关键字的引入使得JavaScript中的面向对象编程更加直观和易用。Class关键字可以看做是一个语法糖,它本质上还是基于原型的面向对象编程。

定义类对象

在传统的JavaScript中,我们可以直接在函数对象上添加方法:

javascript 复制代码
function MyClass() {}  
MyClass.myMethod = function() {  
  console.log('This is a static method.');  
}  

使用class定义一个类非常简单,如下所示:

javascript 复制代码
class Person {  
  constructor(name, age) {  
    this.name = name;  
    this.age = age;  
  }  
    
  sayHello() {  
    console.log(`Hello, my name is ${this.name}, I'm ${this.age} years old.`);  
  }  
}  

在上面的例子中,我们定义了一个Person类,它有一个构造函数和一个sayHello方法。构造函数用于创建实例,sayHello方法用于打印实例的属性。我们使用new关键字来创建一个Person实例,然后调用sayHello方法来打印实例的属性。

定义静态方法和属性

在Class中,我们可以使用Static关键字来定义静态方法和属性。静态方法和属性是定义在类本身上,而不是定义在实例上。因此,在调用静态方法和属性时,我们不需要先创建类的实例。

让我们来看一个例子使用它来创建实例和访问静态属性:

javascript 复制代码
class Shape {  
  static PI = 3.14;  
  
  constructor(name) {  
    this.name = name;  
  }  
  
  static getPI() {  
    return Shape.PI;  
  }  
}  
   
const circle = new Shape('circle');  
console.log(circle.name); // circle  
   
console.log(Shape.getPI()); // 3.14  

在上面的例子中,我们定义了一个Shape类,它有一个静态属性PI和一个静态方法getPI。我们使用new关键字来创建一个Shape实例,然后访问实例的name属性。同时,我们也使用Shape.getPI()来访问静态属性PI。

定义访问器

除了构造函数和方法以外,类还可以定义访问器。访问器是一种特殊的方法,它可以用于对类的属性进行读取和写入操作。

来看看这个例子,展示一下如何使用访问器来定义类的属性:

kotlin 复制代码
class Person {  
  constructor(name, age) {  
    this._name = name;  
    this._age = age;  
  }  
  
  get name() {  
    return this._name;  
  }  
  
  set name(value) {  
    this._name = value;  
  }  
  
  get age() {  
    return this._age;  
  }  
  
  set age(value) {  
    if (value < 0) {  
      throw new Error('Age cannot be negative');  
    }  
    this._age = value;  
  }  
}  

在上面的例子中,我们使用get和set关键字来定义访问器。get用于读取属性值,set用于写入属性值。我们使用_name和_age来存储属性值,但是使用get和set来读取和写入属性值,以控制属性值的访问和修改。

继承和多态

当然,除了上面这些,class还提供了一些高级用法,如继承和多态。继承是一种通过已有的类创建新类的方法,新类可以继承已有类的属性和方法。多态是一种通过类的继承关系实现同名方法的不同实现的方法。

下面是一个展示如何使用class来实现继承和多态的例子:

scala 复制代码
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.`);  
  }  
}  
   
class Cat extends Animal {  
  speak() {  
    console.log(`${this.name} meows.`);  
  }  
}  
   
const dog = new Dog('Rufus');  
const cat = new Cat('Fluffy');  
   
dog.speak(); // Rufus barks.  
cat.speak(); // Fluffy meows.  

在上面的例子中,我们定义了Animal、Dog和Cat三个类。Dog和Cat都继承了Animal类的属性和方法,但是它们的speak方法的实现是不同的。我们使用new关键字来创建一个Dog实例和一个Cat实例,然后调用它们的speak方法,分别输出不同的结果。

总结

总的来说,class是一种新的语法,它提供了一种更加简洁和直观的方式来定义对象和对象的行为。class可以看作是一个语法糖,它本质上是基于原型的面向对象编程,但是提供了更加清晰、易于理解和易于维护的语法。在类中,我们可以定义构造函数、原型方法、静态方法和属性,以及访问器等,可以满足不同的编程需求。同时,类还支持继承和多态等高级用法,可以帮助我们更加灵活地组织和管理代码。

那么这篇文章就到这里结束啦~

如果你想了解更多这类文章,点赞关注作者更新更多~

相关推荐
恋猫de小郭1 小时前
Flutter Zero 是什么?它的出现有什么意义?为什么你需要了解下?
android·前端·flutter
崔庆才丨静觅7 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60618 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了8 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅8 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅9 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅9 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment9 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅9 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端