Class(类)
2023-02-25 18:16:06 时间
基本语法
class是用来替代传统的 构造函数创建对象(面向对象) 的新语法。
class 的本质是 function。 它可以看作一个语法糖,让对象原型的写法更加清晰、更像面向对象编程的语法。
构造函数创建对象写法:
1function Person(name, age) {
2 this.name = name;
3 this.age = age;
4}
5//向构造函数的原型空间增添方法
6Person.prototype.sayInfo = function() {
7 console.log(`${this.name}是${this.age}岁`);
8};
9//new一个实例对象
10const liLei = new Person("LiLei", 20);
11//调用实例对象内部的方法
12liLei.sayInfo();
13//LiLei是20岁
14
改成class类的写法:
1class Person {
2 constructor(name, age) {
3 //constructor相当于上面的构造函数function,可接收参数
4 this.name = name;
5 this.age = age;
6 }
7//向构造函数的原型空间增添方法
8 sayInfo() {
9 console.log(`${this.name}是${this.age}岁`);
10 }
11}
12//new一个实例对象
13const liLei = new Person("LiLei", 20);
14//调用实例对象内部的方法
15liLei.sayInfo();
16//LiLei是20岁
constructor构造器不是必写的,只有需要对实例进行初始化操作(如接收参数),才需要写。不写的话class会自动生成
类的继承
1class Father{
2 name = "liLei";
3
4 sayName() {
5 console.log(this.name);
6 }
7 testFn() {
8 console.log("我是父类的函数!");
9 }
10}
11//儿子继承父亲
12class Son extends Father{
13 sayWork() {
14 console.log(this.name);
15 }
16 testFn() {
17 console.log("我是子类的函数!");
18 }
19}
20const person = new Son();
21person.sayName();//liLei
22person.sayWork();//liLei
23person.testFn();//我是子类的函数!
24
可以看到子类Son继承了父类Father的sayName函数和name这个内部变量。但是同名函数testFn没有继承,是调用到了子类的testFn函数。这里也可以理解为子类的testFn函数覆盖了父类的testFn函数。
super关键字
子类 constructor 方法中必须有 super ,且必须出现在 this 之前。
super用于继承,代表父类的this。 由于子类没有自己的this,在使用constructor必须通过声明super(),才能使用this。
super的作用是子类访问父类的东西。正常情况下子类的方法如果和父类方法重名,会直接覆盖。使用super就可以获取到父类原来的东西
1 class Father {
2 Fn() {
3 console.log("我是爸爸");
4 }
5 }
6
7 class Son extends Father {
8 Fn() {
9 super.Fn()
10 console.log("我是儿子");
11 }
12 }
13 // 调用子类的Fn()方法,
14//方法内部又通过super调用了父类的同名Fn()方法
15 new Son().Fn()
16 //我是爸爸
17 //我是儿子
static关键字
在类里用来声明一个静态,被static关键字定义的东西只能通过类名去调用,不能通过实例调用,可被继承
1class Person {
2 static sayName() {
3 console.log("我是static函数");
4 }
5}
6class Student extends Person {}
7const student = new Student();
8Person.sayName();//我是static函数
9Student.sayName();//我是static函数
10student.sayName();//报错
11
相关文章
- 在 Fedora Linux 系统上安装 PowerShell
- Authenticator:一个 Linux 上的 Authy 的简单的开源替代品
- 修复英特尔 Gen12 显卡安全漏洞,Linux 6.0.11/5.15.81/5.10.157 发布
- Bash 初学者系列 4:在 bash 中使用数组
- 跟着小白一起学鸿蒙—一起学做Tetris(下)
- JetBrains Fleet 和 VS Code:哪一个更好?
- 请尽快升级,谷歌 Chrome 浏览器、火狐 Firefox 浏览器用户需警惕间谍软件 Heliconia
- 使用 Git bisect 命令定位首次引入错误的提交
- Bodhi Linux 7.0.0 开始测试新的功能和软件包
- 如何在 Arch Linux 中安装 OpenOffice(新手指南)
- 2022年优秀预测分析工具和软件
- Kubernetes面临勒索软件攻击,Veritas保护数据免受侵害
- 我写了一个将 Excel 文件转化成本地 Json 文件的插件
- 深入浅出学习eTs—TCP聊天室(十九)
- 深入浅出学习eTs—专属浏览器(十八)
- Bash 初学者系列 3:给 bash 脚本传递参数
- 从eBay出发,浅谈大数据时代下的电子商务
- 一图看懂数据治理、数据管理与数据管控的关系和区别
- 如何在 Arch Linux 中安装 Cinnamon 桌面
- 如何用 Kubeadm 在 Debian 11 上安装 Kubernetes 集群