ES6中新增class类

小灰灰 2023-07-17 06:26 97阅读 0赞

我们都知道JavaScript是弱类型的语言,其缺陷就是缺乏严谨性,但是在JavaScript发展的过程中需要慢慢的弥补这些缺陷,于是便在ES6中出现了类的概念。

文章目录

      • 什么是类?
      • getter 绑定属性
      • setter 设置属性
      • setter和getter结合判断赋值
      • extends 继承
      • super

什么是类?

类是具备某些共同特征的实体的集合,它是一种抽象的概念。

  1. class Person {
  2. constructor(job, name, age, sex) {
  3. this.job = job;
  4. this.name = name;
  5. this.age = age;
  6. this.sex = sex;
  7. }
  8. print() {
  9. console.log('工作:', this.job)
  10. console.log('姓名:', this.name)
  11. console.log('年龄:', this.age)
  12. console.log('性别:', this.sex)
  13. }
  14. }
  15. const a = new Person("程序猿", "robbit", 18, "男");
  16. console.log(a)

在这里插入图片描述
类的声明不会提前,和let、const一样,有临时性死区
类的所有代码都在严格模式下执行的
类的所有方法都是不可枚举的

  1. for (const prop in a) {
  2. console.log(prop)
  3. }
  4. // job
  5. // name
  6. // age
  7. // sex

类的构造器必须使用 new 调用

  1. const a = Person("程序猿", "robbit", 18, "男");
  2. // TypeError: Class constructor Person cannot be invoked without 'new'

类的所有方法都无法当成构造函数直接使用

  1. const b = new a.print()
  2. // TypeError: a.print is not a constructor

getter 绑定属性

将对象属性绑定到查询该属性时将被调用的函数。

  1. class Person {
  2. constructor(name) {
  3. this.name = name;
  4. }
  5. get age() {
  6. return 10
  7. }
  8. print() {
  9. console.log('姓名:', this.name)
  10. console.log('年龄:', this.age)
  11. }
  12. }
  13. var user = new Person('robbit')
  14. console.log(user)

在这里插入图片描述


setter 设置属性

当尝试设置属性时,set语法将对象属性绑定到要调用的函数。

  1. class Person {
  2. constructor(name, age) {
  3. this.name = name;
  4. this.age = age;
  5. }
  6. set age(age) {
  7. if (age < 0) {
  8. age = 0
  9. } else if (age > 200) {
  10. age = 200
  11. }
  12. this._age = age;
  13. }
  14. print() {
  15. console.log('姓名:', this.name)
  16. console.log('年龄:', this.age)
  17. }
  18. }
  19. var user = new Person('robbit', 300)
  20. console.log(user)
  21. // Person {name: "robbit", _age: 200}

setter和getter结合判断赋值

  1. class Person {
  2. constructor(name, age) {
  3. this.name = name;
  4. this.age = age;
  5. }
  6. get age() {
  7. return this._age
  8. }
  9. set age(age) {
  10. if (age < 0) {
  11. age = 0
  12. } else if (age > 200) {
  13. age = 200
  14. }
  15. this._age = age;
  16. }
  17. print() {
  18. console.log('姓名:', this.name)
  19. console.log('年龄:', this.age)
  20. }
  21. }
  22. var user = new Person('robbit', 300)
  23. console.log(user)

在这里插入图片描述


extends 继承

  1. class Animal {
  2. constructor(type, name, age, sex) {
  3. this.type = type;
  4. this.name = name;
  5. this.age = age;
  6. this.sex = sex;
  7. }
  8. print() {
  9. console.log(`种类 : ${ this.type}`)
  10. console.log(`名字 : ${ this.name}`)
  11. console.log(`年龄 : ${ this.age}`)
  12. console.log(`性别 : ${ this.sex}`)
  13. }
  14. }
  15. class Dog extends Animal {
  16. constructor(name, age, sex) {
  17. // 如果定义了constructor 并表示这个是子类,则必须在constructor的第一行手动调用父类的构造函数
  18. super("犬类", name, age, sex)
  19. };
  20. }
  21. const d = new Dog("旺财", 5, "公");
  22. // Dog {type: "犬类", name: "旺财", age: 5, sex: "公"}

super

如果定义了constructor 并表示这个是子类,则必须在constructor的第一行手动调用父类的构造函数,但是super如果说当成对象使用,则表示父类的原型。

  1. class Animal {
  2. constructor(type, name, age, sex) {
  3. this.type = type;
  4. this.name = name;
  5. this.age = age;
  6. this.sex = sex;
  7. }
  8. print() {
  9. console.log(`种类 : ${ this.type}`)
  10. console.log(`名字 : ${ this.name}`)
  11. console.log(`年龄 : ${ this.age}`)
  12. console.log(`性别 : ${ this.sex}`)
  13. }
  14. }
  15. class Dog extends Animal {
  16. constructor(name, age, sex) {
  17. super("犬类", name, age, sex);
  18. this.loves = "吃骨头"
  19. }
  20. print() {
  21. super.print();
  22. console.log(`爱好 : ${ this.loves}`)
  23. }
  24. }
  25. const d = new Dog("旺财", 5, "公");
  26. console.log(d);
  27. // Dog {type: "犬类", name: "旺财", age: 5, sex: "公", loves: "吃骨头"}

发表评论

表情:
评论列表 (有 0 条评论,97人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ES6新增class

    我们都知道JavaScript是弱类型的语言,其缺陷就是缺乏严谨性,但是在JavaScript发展的过程中需要慢慢的弥补这些缺陷,于是便在ES6中出现了类的概念。 文

    相关 ES6 class

    ES6中的类 js中生成实例对象的传统方法是通过构造函数。而ES6提供了更接近传统语言的写法,引入了class类这个概念,作为对象的模板,通过class类关键字,可以定义

    相关 es6class(还需完善)

    js语言当中,生成实例对象的传统方法是通过构造函数。 如何理解es6内的class class作为对象的模板,通过class关键字,可以定义类。 基本 基本上在

    相关 ES6--Class

    Class概述 概述 在ES6中,class (类)作为对象的模板被引入,可以通过 class 关键字定义类。 class 的本质是 function。 它可以