JavaScript的static、this、super关键字介绍

JavaScript的static、this、super关键字介绍

static关键字:

☆ static关键字用于定义类的静态方法和静态属性。

☆ 静态方法是直接与类相关联的方法,不需要实例化类即可调用。

☆ 静态属性是类本身的属性,而不是实例的属性。

☆ 在静态方法内部,不能使用this关键字来引用实例,因为静态方法与特定实例无关。

this关键字:

☆ this关键字指向当前执行代码的对象,它是动态的,根据上下文的不同而变化。

☆ 在类的方法中,this指向调用该方法的实例对象。

☆ 在箭头函数中,this指向定义该函数时的词法环境的this值,而不是动态绑定到实例对象。

☆ 在构造函数中使用this关键字来设置实例的属性。

super关键字:

☆ super关键字用于调用父类的构造函数和方法。

☆ 在子类的构造函数中,可以使用super()来调用父类的构造函数,完成父类的初始化。

☆ 在子类的方法中,可以使用super.method()来调用父类的方法。

☆ 在子类中,通过super关键字可以访问到父类的属性和方法。

static关键字

当在JavaScript中使用static关键字时,可以定义静态方法和静态属性。下面是一些示例来说明如何使用static关键字。

1.定义静态方法:

class MathUtils {static add(a, b) {return a + b;}static multiply(a, b) {return a * b;}
}console.log(MathUtils.add(2, 3)); // 输出: 5
console.log(MathUtils.multiply(2, 3)); // 输出: 6

在上面的示例中,MathUtils类定义了两个静态方法:add()和multiply()。这些方法可以直接通过类名调用,而不需要实例化类。

2.定义静态属性:

class Circle {static PI = 3.14;constructor(radius) {this.radius = radius;}get circumference() {return 2 * Circle.PI * this.radius;}
}const circle = new Circle(5);
console.log(circle.circumference); // 输出: 31.4
console.log(Circle.PI); // 输出: 3.14

在上面的示例中,Circle类定义了一个静态属性PI,它存储了圆周率的值。在实例方法circumference()中,可以通过Circle.PI来访问静态属性。

需要注意的是,在静态方法内部,不能使用this关键字,因为静态方法与特定实例无关。静态方法只能访问静态属性或调用其他静态方法。

通过使用static关键字,我们可以在JavaScript中创建更具灵活性和可重用性的代码结构。

this关键字

在JavaScript中,this关键字用于指向当前执行代码的对象。下面是一些示例来说明如何使用this关键字。

1.在方法中使用this:

const person = {name: 'John',greet() {console.log(`Hello, my name is ${this.name}.`);}
};person.greet(); // 输出: Hello, my name is John.

在上面的示例中,this关键字指向包含这个方法的对象person。通过this.name,我们可以访问到对象的属性。

2.在构造函数中使用this:

class Rectangle {constructor(width, height) {this.width = width;this.height = height;}getArea() {return this.width * this.height;}
}const rectangle = new Rectangle(5, 3);
console.log(rectangle.getArea()); // 输出: 15

在上面的示例中,构造函数Rectangle使用this来设置实例的属性width和height。在实例方法getArea()中,我们可以通过this来访问实例的属性。

需要注意的是,在箭头函数中,this关键字的行为有所不同。它不会根据调用方式或上下文而变化,而是继承了定义该函数时的词法环境的this值。

3.在事件处理程序中使用this:

  <script>document.addEventListener('DOMContentLoaded', function() {const button = document.querySelector('button');button.addEventListener('click', function() {console.log(this); // 输出: <button>Click me</button>});});</script><body><button>Click me</button></body>

在上面的示例中,this指向触发事件的元素,即按钮元素。这样我们可以在事件处理程序中访问和操作该元素。

通过使用this关键字,我们可以在JavaScript中引用当前上下文的对象,从而实现更灵活和动态的编程。

super关键字

在JavaScript中,super关键字用于调用父类的构造函数、方法和访问父类的属性。下面是一些示例来说明如何使用super关键字。

1.调用父类的构造函数:

class Animal {constructor(name) {this.name = name;}
}class Dog extends Animal {constructor(name, breed) {super(name); // 调用父类的构造函数this.breed = breed;}
}const dog = new Dog('Buddy', 'Golden Retriever');
console.log(dog.name); // 输出: Buddy
console.log(dog.breed); // 输出: Golden Retriever

在上面的示例中,Dog类继承了Animal类,并在子类的构造函数中使用super(name)来调用父类的构造函数并传递参数。

2.调用父类的方法:

class Animal {constructor(name) {this.name = name;}speak() {console.log(`${this.name} makes a sound.`);}
}class Dog extends Animal {constructor(name, breed) {super(name);this.breed = breed;}speak() {super.speak(); // 调用父类的speak()方法console.log(`${this.name} barks.`);}
}const dog = new Dog('Buddy', 'Golden Retriever');
dog.speak(); 
// 输出:
// Buddy makes a sound.
// Buddy barks.

在上面的示例中,Dog类重写了父类的speak()方法,并在子类的speak()方法中使用super.speak()来调用父类的speak()方法。

3.访问父类的属性:

class Animal {constructor(name) {this.name = name;}
}class Dog extends Animal {constructor(name, breed) {super(name);this.breed = breed;}getDetails() {console.log(`Name: ${this.name}, Breed: ${this.breed}`);}
}const dog = new Dog('Buddy', 'Golden Retriever');
dog.getDetails(); // 输出: Name: Buddy, Breed: Golden Retriever

在上面的示例中,Dog类通过super(name)来访问父类Animal的属性name。

通过使用super关键字,我们可以在JavaScript中实现继承和访问父类的构造函数、方法和属性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git学习总结

Git学习 目录 Git学习1.基础1.1 Git Commit:提交记录1.2 Git Branch:创建分支1.3 Git Merge:合并分支的方式一1.4 Git Rebase:合并分支的方式二1.5 查看提交记录&#xff1a;提交历史、详细信息、commit_hash1.6 在提交树上移动 2. 高级2.1 HEAD2.2 相对引用2.3 使用相对引用强…

css 弹性布局的详细说明

CSS弹性布局&#xff08;Flexible Box Layout&#xff0c;简称Flexbox&#xff09;是一种用于创建自适应和可伸缩布局的CSS模块。它提供了一种简单而强大的方式来对容器中的子元素进行布局&#xff0c;使它们能够自动调整大小、排列和对齐。 Flexbox通过在容器和子元素上应用一…

window 命令笔记

1.查看端口 输入“netstat -ano”并回车可以获得所有网络连接活动的列表&#xff0c;在表中&#xff0c;本地地址IP地址后方冒号之后的即是端口号&#xff1a; 如果想要查找特定的端口可以输入命令“netstat -aon|findstr “端口号””&#xff0c;例如“netstat -aon|findstr…

My_window类(带有next和quit按钮)

运行代码&#xff1a; //My_window类&#xff08;带有next和quit按钮&#xff09; #include"std_lib_facilities.h" #include"GUI/Simple_window.h" #include"GUI/GUI.h" #include"GUI/Graph.h" #include"GUI/Point.h"//--…

解决错误 “Plugin ‘maven-clean-plugin:3.1.0‘ not found“ 的方法详解

系列文章目录 文章目录 系列文章目录前言一、检查 Maven 插件版本&#xff1a;二、检查 Maven 仓库&#xff1a;三、检查 Maven 配置&#xff1a;总结 前言 在使用 Maven 构建项目时&#xff0c;可能会遇到错误信息 “Plugin ‘maven-clean-plugin:3.1.0’ not found”&#x…

C++基础算法离散化及区间合并篇

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C算法 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 主要讲解了双指针&#xff0c;位运算&#xff0c;离散化以及区间合并。…

有效的括号(C)

bool isValid(char* s) {ST st;StackInit(&st);while (*s) //遍历 -- 与\0终止{//是左括号 压栈if (*s ( || *s [ *s {){StackPush(&st, *s);s;}else{//应对样例&#xff1a; ’]if (StackEmpty(&st)){StackDestroy(&st);return false;}//不是左括号 应该就…

Spark MLlib快速入门(1)逻辑回归、Kmeans、决策树、Pipeline、交叉验证

Spark MLlib快速入门(1)逻辑回归、Kmeans、决策树案例 除了scikit-learn外&#xff0c;在spark中也提供了机器学习库&#xff0c;即Spark MLlib。 在Spark MLlib机器学习库提供两套算法实现的API&#xff1a;基于RDD API和基于DataFrame API。今天&#xff0c;主要介绍下Data…

docker k8s

Docker docker到底与一般的虚拟机有什么不同呢&#xff1f; 我们知道一般的linux系统即GNU/Linux系统包括两个部分&#xff0c;linux系统内核GNU提供的大量自由软件&#xff0c;而centos就是众多GNU/Linux系统中的一个。 虚拟机会在宿主机上虚拟出一个完整的操作系统与宿主机完…

在 3ds Max 中对链模型进行摆放姿势处理

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 建模和“摆姿势”3D链可能看起来是一项繁琐的工作&#xff0c;但实际上可以通过使用阵列工具并将链中的链接视为骨骼来轻松完成。在本教程中&#xff0c;我将向您展示如何对链条进行建模&#xff0c;并通过…

程序员的自我修养(4)

可执行文件的装载与进程 代码经过预编译&#xff0c;编译&#xff0c;汇编&#xff0c;链接过程后生成可执行文件&#xff0c;但可执行文件只有装载到内存程序才可以运行&#xff0c;这节讲可执行文件在linux下的装载过程&#xff0c;以及与进程的关系等等。 1.程序与进程的关…

oled拼接屏在柳州的户外广告中有哪些应用展现?

柳州oled拼接屏是一种高端的显示屏&#xff0c;它采用了OLED技术&#xff0c;具有高亮度、高对比度、高色彩饱和度、高刷新率等优点&#xff0c;能够呈现出更加真实、清晰、细腻的图像效果。 同时&#xff0c;柳州oled拼接屏还具有拼接功能&#xff0c;可以将多个屏幕拼接在一…

vue element select下拉框回显展示数字

vue element select下拉框回显展示数字 问题截图&#xff1a; 下拉框显示数字可以从数据类型来分析错误&#xff0c;接收的数据类型是字符串&#xff0c;但是value是数字类型 <el-form-item prop"classifyLabelId" :label"$t(item.classifyLabelId)"…

GUI-Menu菜单实例

运行代码&#xff1a; //GUI-Menu菜单实例 #include"std_lib_facilities.h" #include"GUI/Simple_window.h" #include"GUI/GUI.h" #include"GUI/Graph.h" #include"GUI/Point.h"struct Lines_window :Window {Lines_window…

常见的网络攻击

​ 1.僵木蠕毒 攻击业内习惯把僵尸网络、木马、蠕虫、感染型病毒合称为僵木蠕毒。从攻击路径来看&#xff0c;蠕虫和感染型病毒通过自身的能力进行主动传播&#xff0c;木马则需要渠道来进行投放&#xff0c;而由后门木马&#xff08;部分具备蠕虫或感染传播能力&#xff09;构…

Mybatis架构简介

文章目录 1.整体架构图2. 基础支撑层2.1 类型转换模块2.2 日志模块2.3 反射工具模块2.4 Binding 模块2.5 数据源模块2.6缓存模块2.7 解析器模块2.8 事务管理模块3. 核心处理层3.1 配置解析3.2 SQL 解析与 scripting 模块3.3 SQL 执行3.4 插件4. 接口层1.整体架构图 MyBatis 分…

智能优化算法——灰狼优化算法(PythonMatlab实现)

目录 1 灰狼优化算法基本思想 2 灰狼捕食猎物过程 2.1 社会等级分层 2.2 包围猎物 2.3 狩猎 2.4 攻击猎物 2.5 寻找猎物 3 实现步骤及程序框图 3.1 步骤 3.2 程序框图 4 Python代码实现 5 Matlab实现 1 灰狼优化算法基本思想 灰狼优化算法是一种群智能优化算法&#xff0c;它的…

ChatGPT:探索人工智能语言模型的前沿技术

一、ChatGPT的背景和原理 ChatGPT是由OpenAI开发的基于GPT-3.5架构的语言模型。它通过大规模的预训练和微调过程&#xff0c;学习了海量的文本数据&#xff0c;并能够生成连贯、有逻辑的回答。ChatGPT使用了自注意力机制和深度神经网络&#xff0c;能够对上下文进行理解和生成有…

C++学习笔记1

Hello World程序的组成部分 可以分为两部分&#xff1a; &#xff08;1&#xff09;以#开头的是预处理器编译指令 &#xff08;2&#xff09;int main() 开头的是程序的主体 预处理编译指令#include 定义&#xff1a;预处理器是一个在编译前运行的工具 #include 是让预处理器获…

java版工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离 功能清单

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示…