JS类的学习

news/2024/5/9 14:23:44/文章来源:https://blog.csdn.net/weixin_51884452/article/details/130358243

文章目录

  • 一、JavaScript 类(class)
  • 二、JavaScript 类继承
  • 三、 JavaScript 静态方法
  • 总结

一、JavaScript 类(class)

类是用于创建对象的模板。

我们使用 class 关键字来创建一个类,类体在一对大括号 {} 中,我们可以在大括号 {} 中定义类成员的位置,如方法或构造函数。

每个类中包含了一个特殊的方法 constructor(),它是类的构造函数这种方法用于创建和初始化一个由 class 创建的对象。

创建一个类的语法格式如下:


class ClassName {constructor() { ... }
}

实例:


class Runoob {constructor(name, url) {this.name = name;this.url = url;}
}

以上实例创建了一个类,名为 “Runoob”。

类中初始化了两个属性: “name” 和 “url”。

  • 使用类

定义好类后,我们就可以使用 new 关键字来创建对象


class Runoob {constructor(name, url) {this.name = name;this.url = url;}
}let site = new Runoob("菜鸟教程",  "https://www.runoob.com");

创建对象时会自动调用构造函数方法 constructor()。

  • 类表达式

类表达式是定义类的另一种方法。类表达式可以命名或不命名。命名类表达式的名称是该类体的局部名称。

// 未命名/匿名类
let Runoob = class {constructor(name, url) {this.name = name;this.url = url;}
};
console.log(Runoob.name);
// output: "Runoob"// 命名类
let Runoob = class Runoob2 {constructor(name, url) {this.name = name;this.url = url;}
};
console.log(Runoob.name);
// 输出: "Runoob2"

构造方法

构造方法是一种特殊的方法:

构造方法名为 constructor()。
构造方法在创建新对象时会自动执行。
构造方法用于初始化对象属性。
如果不定义构造方法,JavaScript 会自动添加一个空的构造方法。
  • 类的方法

我们使用关键字 class 创建一个类,可以添加一个 constructor() 方法,然后添加任意数量的方法。


class ClassName {constructor() { ... }method_1() { ... }method_2() { ... }method_3() { ... }
}

以下实例我们创建一个 “age” 方法,用于返回网站年龄:


class Runoob {constructor(name, year) {this.name = name;this.year = year;}age() {let date = new Date();return date.getFullYear() - this.year;}
}let runoob = new Runoob("菜鸟教程", 2018);
document.getElementById("demo").innerHTML =
"菜鸟教程 " + runoob.age() + " 岁了。";

我们还可以向类的方法发送参数:


class Runoob {constructor(name, year) {this.name = name;this.year = year;}age(x) {return x - this.year;}
}let date = new Date();
let year = date.getFullYear();let runoob = new Runoob("菜鸟教程", 2020);
document.getElementById("demo").innerHTML=
"菜鸟教程 " + runoob.age(year) + " 岁了。";
  • 严格模式 “use strict”

类声明和类表达式的主体都执行在严格模式下。比如,构造函数,静态方法,原型方法,getter 和 setter 都在严格模式下执行。

如果你没有遵循严格模式,则会出现错误:


class Runoob {constructor(name, year) {this.name = name;this.year = year;}age() {// date = new Date();  // 错误let date = new Date(); // 正确return date.getFullYear() - this.year;}
}

在这里插入图片描述

二、JavaScript 类继承

JavaScript 类继承使用 extends 关键字。

继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。

super() 方法用于调用父类的构造函数。

当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类(父类),新建的类称为派生类(子类)。

继承代表了 is a 关系。例如,哺乳动物是动物,狗是哺乳动物,因此,狗是动物,等等。
在这里插入图片描述
以下实例创建的类 “Runoob” 继承了 “Site” 类:

class Site {constructor(name) {this.sitename = name;}present() {return '我喜欢' + this.sitename;}
}class Runoob extends Site {constructor(name, age) {super(name);this.age = age;}show() {return this.present() + ', 它创建了 ' + this.age + ' 年。';}
}let noob = new Runoob("菜鸟教程", 5);
document.getElementById("demo").innerHTML = noob.show();

super() 方法引用父类的构造方法。
通过在构造方法中调用 super() 方法,我们调用了父类的构造方法,这样就可以访问父类的属性和方法

继承对于代码可复用性很有用。

  • getter 和 setter

类中我们可以使用 getter 和 setter 来获取和设置值,getter 和 setter 都需要在严格模式下执行。

getter 和 setter 可以使得我们对属性的操作变的很灵活。

类中添加 getter 和 setter 使用的是 get 和 set 关键字。

以下实例为 sitename 属性创建 getter 和 setter:

class Runoob {constructor(name) {this.sitename = name;}get s_name() {return this.sitename;}set s_name(x) {this.sitename = x;}
}let noob = new Runoob("菜鸟教程");document.getElementById("demo").innerHTML = noob.s_name;

注意:即使 getter 是一个方法,当你想获取属性值时也不要使用括号。

getter/setter 方法的名称不能与属性的名称相同,在本例中属名为 sitename。
很多开发者在属性名称前使用下划线字符 _ 将 getter/setter 与实际属性分开

以下实例使用下划线 _ 来设置属性,并创建对应的 getter/setter 方法:

class Runoob {constructor(name) {this._sitename = name;}get sitename() {return this._sitename;}set sitename(x) {this._sitename = x;}
}let noob = new Runoob("菜鸟教程");document.getElementById("demo").innerHTML = noob.sitename;

要使用 setter,请使用与设置属性值时相同的语法,虽然 set 是一个方法,但需要不带括号:

class Runoob {constructor(name) {this._sitename = name;}set sitename(x) {this._sitename = x;}get sitename() {return this._sitename;}
}let noob = new Runoob("菜鸟教程");
noob.sitename = "RUNOOB";
document.getElementById("demo").innerHTML = noob.sitename;
  • 提升

函数声明和类声明之间的一个重要区别在于, 函数声明会提升,类声明不会。

你首先需要声明你的类,然后再访问它,否则类似以下的代码将抛出 ReferenceError:

// 这里不能这样使用类,因为还没有声明
// noob = new Runoob("菜鸟教程")
// 报错class Runoob {constructor(name) {this.sitename = name;}
}// 这里可以使用类了
let noob = new Runoob("菜鸟教程")

在这里插入图片描述

三、 JavaScript 静态方法

静态方法是使用 static 关键字修饰的方法,又叫类方法,属于类的,但不属于对象,在实例化对象之前可以通过 类名.方法名 调用静态方法。

静态方法不能在对象上调用,只能在类中调用。

class Runoob {constructor(name) {this.name = name;}static hello() {return "Hello!!";}
}let noob = new Runoob("菜鸟教程");// 可以在类中调用 'hello()' 方法
document.getElementById("demo").innerHTML = Runoob.hello();// 不能通过实例化后的对象调用静态方法
// document.getElementById("demo").innerHTML = noob.hello();
// 以上代码会报错

在这里插入图片描述如果你想在对象 noob 中使用静态方法,可以作为一个参数传递给它:

class Runoob {constructor(name) {this.name = name;}static hello(x) {return "Hello " + x.name;}
}
let noob = new Runoob("菜鸟教程");
document.getElementById("demo").innerHTML = Runoob.hello(noob);

学习总结来自“https://www.runoob.com/js”

总结

技术-》招致-》无弊-》解弊。
”正确与真实“:正确的不一定真实,真实却是独立且自由的。

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

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

相关文章

Python小姿势 - Python操作MongoDB数据库

Python操作MongoDB数据库 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。 现在&a…

Tomcat源码:Pipeline与Valve

参考资料: 《Tomcat组成与工作原理》 《Tomcat - Container的管道机制:责任链模式》 《Tomcat源码解析系列 Pipeline 与 Valve》 前文: 《Tomcat源码:启动类Bootstrap与Catalina的加载》 《Tomcat源码:容器的生命…

Linux安装miniconda3

下载Miniconda(Python3版本) 下载地址:https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh 安装Miniconda(需要连网) (1)将Miniconda3-latest-Linux-x86_64.sh上传到/o…

ASP.NET Core MVC 从入门到精通之Razor语法

随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生&#xff0c…

Go语言基础----Go语言简介

【原文链接】Go语言基础----Go语言简介 一、Go语言简介 Go语言,又称Golang,是Google公司的Robert Griesemer,Rob Pike 及 Ken Thompson开发的一种静态强类型、编译型的语言。Go语言语法和C语言接近,但是功能上内存安全&#xff…

Day2_vue集成elementUI完善布局

上一节,实现了从O到vue页面主体框架的搭建,这一节补充完善搜索框;新增、删除、导入、导出等按钮;表格设置;分页;面包屑的实现! 目录 搜索框 新增删除、导入、导出按钮 表格设置 设置边框&a…

AI剧本拆解,教你利用AI快速拆解剧本

AI剧本拆解是一项将影视、戏剧等剧本进行分析和优化的技术,可以帮助制作团队更好地规划角色、情节、场景等元素,并提升作品的艺术水平和观赏体验。 1、为什么要拆解剧本? 剧本拆解是制片人和导演的第一项工作,把剧本中各项要素分…

AI 编程

GitHub Copilot(收费) 开发者:微软 openAI 2022年8月22日之后开始收费,10美元/月,100美元/年。 CodeGeeX(免费) CodeGeeX 可以根据自然语言注释描述(支持中英文注释&#xff09…

flask+apscheduler+企业微信消息机器人推送

简介:APScheduler是一个轻量级的Python库,用于在后台运行定时任务和延迟任务。它可以轻松地安排任务并支持多种类型的触发器,例如固定间隔、日期/时间表达式、CRON表达式等。APScheduler还提供了多个后台调度器实现,例如基于线程池…

Qt连接MySQL数据库最详细的教程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.直接通过MySQL的驱动加载数据库1)所需代码2)解决QMYSQL driver not loaded 2.通过ODBC连接MySQL数据库1)官方解释2…

taro之项目初始化模版

项目初始化模板 一直以来,在使用 Taro CLI 的 taro init 命令创建项目时,CLI 会提供若干内置模板给开发者选择。但是很多团队都有自己独特的业务场景,需要使用和维护的模板也不尽一致,因此 Taro 支持把项目模板打包成一个能力赋予…

《Netty》从零开始学netty源码(四十四)之PoolChunk释放内存

free 当PoolChunk需要释放内存空间时可调用free方法,具体的源码过程如下: 在这个过程中最重要的是第三步的collapseRuns方法,当释放了空间以后要更新runsAvail和runAvailsMap的信息,如果handle对应的内存空间的上边界以及下边界是…

任务调度原理 通俗详解(FreeRTOS)

寄存器说明 以cortex-M3,首先先要了解比较特别的几个寄存器: r15 PC程序计数器(Program Counter),存储下一条要执行的指令的地址。 r14 LR连接寄存器(Link Register ),保存函数返回地址&#x…

代码随想录算法训练营第四十三天|1049. 最后一块石头的重量 II 、494. 目标和、474.一和零

文章目录 背包问题题型1049. 最后一块石头的重量 II494. 目标和474.一和零 背包问题题型 等和子集 —0-1背包能否装满最后一块石头—0-1背包尽量装满目标和—0-1背包装满,且有多少种装的方式(组合问题) 1049. 最后一块石头的重量 II 题目链…

从数据处理到人工智能(常用库的介绍)

Python库之数据分析 ​​​​​​​​​​​​ 可以这么理解pandas通过扩展了对一维数据和二维数据的一种表示,因而能够形成更高层对数据的操作,简化数据分析的运行 Python库之数据可视化 Matplotlib — Visualization with Python seaborn: statistic…

C++ 编程笔记(本人出品,必属精品)

文章目录 Part.I IntroductionChap.I 快应用 Part.II C 基础Chap.I 一些待整理的知识点Chap.I 常用的库或类 Part.III 杂记Part.X Others WorkChap.I 大佬的总结Chap.II 大佬的轮子 Part.I Introduction 前言:C 用的人还是比较多的,主要是它比较快并且面…

不是什么高深玩意,Arrays.asList、ArrayList.subList需要注意的坑

前言 集合是日常工作中几乎每天都在用的玩意,也是八股文中被翻烂的东西,诸如List、Map,确实很重要也很实用,但是不注意细节就比较容易踩坑。比较常见的就是今天要整理的Arrays.asList和ArrayList.subList。不是什么高深的东西&…

Oracle跨服务器取数——DBlink 初级使用

前言 一句话解释DBlink是干啥用的 实现跨库访问的可能性. 通过DBlink我们可以在A数据库访问到B数据库中的所有信息,例如我们在加工FDS层表时需要访问ODS层的表,这是就需要跨库访问 一、DBlink的分类 private:用户级别,只有创建该dblink的用户才可以使…

一篇文章告诉你金融行业如何高效管理文件

由于金融行业的行业属性,信息安全万分重要。因此在文件管理工具时,要注意数据安全问题,那么金融行业如何高效管理文件呢? 首先金融行业在文件管理时可能面临以下问题: 1,资料繁杂,整理困难&…

starrocks基于prometheus实现监控告警

监控报警 本文介绍如何为 StarRocks 设置监控报警。 StarRocks 提供两种监控报警的方案。企业版用户可以使用内置的 StarRocksManager,其自带的 Agent 从各个 Host 采集监控信息,上报至 Center Service,然后做可视化展示。StarRocksManager …