JavaScript里Class类的基本介绍

634 阅读3分钟

「这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战

类(英语:class)在面向对象编程中是一种面向对象计算机编程语言的构造,是创建对象的蓝图,描述了所创建的对象共同的特性和方法。类的更严格的定义是由某种特定的元数据所组成的内聚的包。它描述了一些对象的行为规则,而这些对象就被称为该类的实例 ——维基百科

下面我们就来看看JavaScript中的类。

定义类

类声明

声明一个类,你可以使用带有class关键字的类名

📖 基本语法:

class MyClass {
  prop = value; // 属性

  constructor(...) { // 构造器
    // ...
  }

  method(...) {} // method

  get something(...) {} // getter 方法
  set something(...) {} // setter 方法

  [Symbol.iterator]() {} // 有计算名称(computed name)的方法(此处为 symbol)
  // ...
}

🎨 使用示例:

class User {
  constructor(name) {
    this.name = name;
  }
  sayHi() {
    console.log(this.name);
  }
}

let user = new User("Axjy")

🍇 运行结果:

image-20211118220042091

💡 示例分析:

使用 new MyClass() 来创建新对象。new 会自动调用 constructor() 方法,因此我们可以在 constructor() 中初始化对象。

new User("John") 被调用:

  1. 一个新对象被创建。
  2. constructor 使用给定的参数运行,并为其分配 this.name

……然后我们就可以调用对象方法了,例如 user.sayHi

类表达式

就像函数一样,类可以在另外一个表达式中被定义,被传递,被返回,被赋值等。

🎨 使用示例:

let User = class {
  sayHi() {
    console.log("Hello");
  }
};

类似于命名函数表达式(Named Function Expressions),类表达式可能也应该有一个名字。

// “命名类表达式(Named Class Expression)”
// (规范中没有这样的术语,但是它和命名函数表达式类似)
let User = class MyClass {
  sayHi() {
    console.log(MyClass); // MyClass 这个名字仅在类内部可见
  }
};
new User().sayHi(); // 正常运行,显示 MyClass 中定义的内容
console.log(MyClass); // error,MyClass 在外部不可见

🍈 运行结果:

image-20211118220540790

什么是class?

class 到底是什么?在 JavaScript 中,类是一种函数。

✅ 可以打印来验证一下:

image-20211118214234690

class User {...} 构造实际上做了这些事:

  1. 创建一个名为 User 的函数,该函数成为类声明的结果。该函数的代码来自于 constructor 方法(如果我们不编写这种方法,那么它就被假定为空)。
  2. 存储类中的方法,例如 User.prototype 中的 sayHi

new User 对象被创建后,当我们调用其方法时,它会从原型中获取对应的方法。因此,对象 new User 可以访问类中的方法。

image-20211118215258962

类拓展

类的Getters和setters

就像对象字面量,类可能包括 getters/setters,计算属性(computed properties)等。

🎨 使用示例:

class User {
  constructor(name) {
    // 调用 setter
    this.name = name;
  }

  get name() {
    return this._name;
  }

  set name(value) {
    if (value.length < 4) {
      console.log("昵称至少4个字符");
      return;
    }
    this._name = value;
  }
}

🍉 运行结果:

image-20211118222013376

计算属性名称[...]

类方法名称还可以使用中括号 [...] 的方式计算

image-20211118221201097

参考资料:

MDN Classes

WIKI Class (computer programming)

Class basic syntax


🎨【点赞】【关注】不迷路,更多前端干货等你解锁

往期推荐

👉 产品、技术、设计等各互联网领域的「基础术语」扫盲

👉 Web安全的防御手段都在这里了!

👉 JavaScript的7大类型补缺补漏!

👉 JavaScript深拷贝和浅拷贝看这篇就够了!