「这是我参与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")
🍇 运行结果:
💡 示例分析:
使用 new MyClass() 来创建新对象。new 会自动调用 constructor() 方法,因此我们可以在 constructor() 中初始化对象。
当 new User("John") 被调用:
- 一个新对象被创建。
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 在外部不可见
🍈 运行结果:
什么是class?
class 到底是什么?在 JavaScript 中,类是一种函数。
✅ 可以打印来验证一下:
class User {...} 构造实际上做了这些事:
- 创建一个名为
User的函数,该函数成为类声明的结果。该函数的代码来自于constructor方法(如果我们不编写这种方法,那么它就被假定为空)。 - 存储类中的方法,例如
User.prototype中的sayHi。
当 new User 对象被创建后,当我们调用其方法时,它会从原型中获取对应的方法。因此,对象 new User 可以访问类中的方法。
类拓展
类的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;
}
}
🍉 运行结果:
计算属性名称[...]
类方法名称还可以使用中括号 [...] 的方式计算
参考资料:
WIKI Class (computer programming)
🎨【点赞】【关注】不迷路,更多前端干货等你解锁
往期推荐