JavaScript学习笔记(九)

56、JavaScript 类

56.1 JavaScript 类的语法

  • 请使用关键字 class 创建一个类。

  • 请始终添加一个名为 constructor() 的方法。

  • JavaScript 类不是对象

  • 它是 JavaScript 对象的模板

  • 语法:

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

示例:例子创建了一个名为 “Car” 的类:

  class Cars {constructor(name, year) {this.name = name;this.year = year;}}

56.2 使用类

  • 当您有了一个类时,可以使用该类来创建对象
  <body><p id="demo"></p><script>class Cars {constructor(name, year) {this.name = name;this.year = year;}}var cars = new Cars("文阿花", "2014");document.getElementById("demo").innerHTML = cars.name + " " + cars.year;</script></body>

输出:文阿花 2014

56.3 构造方法

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

  • 它必须有确切的名称的 “constructor
  • 创建新对象时自动执行
  • 用于初始化对象属性
  • 如果您没有定义构造方法,JavaScript 会添加一个空的构造方法。

56.4 类方法

  • 创建类方法的语法与对象方法相同。

  • 请使用关键字 class 创建一个类。

  • 请始终添加 constructor() 方法。

  • 然后添加任意数量的方法。

  • 语法:

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

示例:创建一个名为 “age” 的类方法,它返回车年:

 <body><p id="demo"></p><script>class Cars {constructor(name, year) {this.name = name;this.year = year;}age() {let date = new Date();return date.getFullYear() - this.year;}}var cars = new Cars("文阿花", "2014");document.getElementById("demo").innerHTML = "年纪:" + cars.age();</script></body>

输出:年纪:10

  • 您可以向类方法发送参数:
 <body><p id="demo"></p><script>class Cars {constructor(name, year) {this.name = name;this.year = year;}age(x) {return x - this.year;}}var cars = new Cars("文阿花", "2014");var date = new Date();let year = date.getFullYear();document.getElementById("demo").innerHTML = "年纪:" + cars.age(year);</script></body>

输出:年纪:10

57、JavaScript 类继承

57.1 类继承

  • 如需创建类继承,请使用 extends 关键字。

  • 使用类继承创建的类继承了另一个类的所有方法

示例:创建一个名为 “Model” 的类,它将继承 “Car” 类的方法:

①、super() 方法引用父类。

②、通过在 constructor 方法中调用 super() 方法,我们调用了父级的 constructor 方法,获得了父级的属性和方法的访问权限。

③、继承对于代码可重用性很有用:在创建新类时重用现有类的属性和方法。

  <body><p id="demo"></p><script>class Cars {constructor(carName) {this.name = carName;}present() {return "I have a " + this.name;}}class Model extends Cars {constructor(carName, name2) {super(carName);this.model = name2;}show() {return this.present() + "哈哈哈" + this.model;}}var model = new Model("1", "2");document.getElementById("demo").innerHTML = model.show();</script></body>

输出:I have a 1哈哈哈2

57.2 Getter 和 Setter

  • 类还允许您使用 gettersetter

  • 为您的属性使用 gettersetter 很聪明,特别是如果您想在返回它们之前或在设置它们之前对值做一些特殊的事情。

  • 如需在类中添加 gettersetter,请使用 getset 关键字。

(1)示例:为 “carname” 属性创建 getter 和 setter:

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

②、getter/setter 方法的名称不能与属性名称相同,在本例中为 carName。

③、许多程序员在属性名称前使用下划线字符 _ 将 getter/setter 与实际属性分开:

<body><p id="demo"></p><script>class Cars {constructor(carName) {this.name = carName;}get cname() {return this.name;}set cname(x) {this.name = x;}}var car = new Cars("111");document.getElementById("demo").innerHTML = car.name;</script></body>

输出:111

(2)示例:您可以使用下划线字符将 getter/setter 与实际属性分开:

  <body><p id="demo"></p><script>class Cars {constructor(brand) {this._name1 = brand;}get cname() {return this._name1;}set cname(x) {this._name1 = x;}}let myCar = new Cars("Ford");document.getElementById("demo").innerHTML = myCar._name1;</script></body>

输出:Ford

(3)实例:使用 setter 将汽车名称更改为 “Volvo”:

<body><p id="demo"></p><script>class Cars {constructor(brand) {this._name1 = brand;}get cname() {return this._name1;}set cname(x) {this._name1 = x;}}let myCar = new Cars("Ford");myCar._name1 = "Volvo";document.getElementById("demo").innerHTML = myCar._name1;</script></body>

输出:Volvo

58、JavaScript Static 方法

  • static 类方法是在类本身上定义的。

  • 您不能在对象上调用 static 方法,只能在对象类上调用。

  <body><p id="demo"></p><script>class Cars {constructor(brand) {this.name = brand;}static hello() {return "Hello";}}let myCar = new Cars("Ford");document.getElementById("demo").innerHTML = Cars.hello();//但不能在 Car 对象上调用, 此举将引发错误。// document.getElementById("demo").innerHTML = myCar.hello();</script></body>

59、Js Async之JavaScript 回调:callback

59.1 函数序列

  • JavaScript 函数按照它们被调用的顺序执行。而不是以它们被定义的顺序。
    示例:此例最终将显示 “Goodbye”:
  <body><p id="demo"></p><script>function myFunction01() {document.getElementById("demo").innerHTML = "Hello";}function myFunction02() {document.getElementById("demo").innerHTML = "GoodBye";}myFunction01();myFunction02();</script></body>

输出:GoodBye

59.2 JavaScript 回调

  • 回调是作为参数传递给另一个函数的函数。

示例:当您将函数作为参数传递时,请记住不要使用括号:

 <body><p id="demo"></p><script>function myFunction01(some) {document.getElementById("demo").innerHTML = some;}function myFunction02(num1, num2, myCallback) {let sum = num1 + num2;myCallback(sum);}myFunction02(5, 3, myFunction01);</script></body>

60、异步的 JavaScript

  • 在现实世界中,回调最常与异步函数一起使用。

一个典型的例子是 JavaScript setTimeout()。

60.1 等待超时: setTimeout()

  • 在使用 JavaScript 函数 setTimeout() 时,可以指定超时时执行的回调函数:
  <body><p id="demo"></p><script>setTimeout(myFunction01, 3000);function myFunction01() {document.getElementById("demo").innerHTML = "I Love You!";}</script></body>

或者:

 <body><p id="demo"></p><script>setTimeout(function () {myFunction01("I Love You!");}, 3000);function myFunction01(value) {document.getElementById("demo").innerHTML = value;}</script></body>

输出:(3秒后)页面展示:I Love You!

60.2 等待间隔:setInterval()

  • 在使用 JavaScript 函数 setInterval() 时,可以指定每个间隔执行的回调函数:
    示例:实现动态时间展示:
 <body><p id="demo"></p><script>setInterval(myFunction, 1000);function myFunction() {let d = new Date();document.getElementById("demo").innerHTML =d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();}</script></body>

输出:9:19:21

60.3 等待文件

  • 如果您创建函数来加载外部资源(如脚本或文件),则在内容完全加载之前无法使用这些内容。这是使用回调的最佳时机。

此例加载一个 HTML 文件 (mycar.html),并在文件完全加载后在网页中显示该 HTML 文件:

<!DOCTYPE html>
<html><body><h1>JavaScript 回调</h1><p id="demo"></p><script>function myDisplayer(some) {document.getElementById("demo").innerHTML = some;}function getFile(myCallback) {let req = new XMLHttpRequest();req.open("GET", "mycar.html", true);req.onreadystatechange = function () {if (req.readyState == 4 && req.status == 200) {myCallback(this.responseText);} else {myCallback("Error: " + req.status);}};req.send();}getFile(myDisplayer);</script></body>
</html>

mycar.html

<img src="img_car.jpg" alt="Nice car" style="width:100%"><p>A car is a wheeled, self-powered motor vehicle used for transportation.
Most definitions of the term specify that cars are designed to run primarily on roads, to have seating for one to eight people, to typically have four wheels.</p><p>(Wikipedia)</p>

运行效果:
在这里插入图片描述

61、JavaScript Promise

  • JavaScript Promise 对象包含生产代码和对消费代码的调用

61.1 Promise 语法

let myPromise = new Promise(function(myResolve, myReject) {
// "Producing Code"(可能需要一些时间)myResolve(); // 成功时myReject();  // 出错时
});// "Consuming Code" (必须等待一个兑现的承诺)
myPromise.then(function(value) { /* 成功时的代码 */ },function(error) { /* 出错时的代码 */ }
);
  • 当执行代码获得结果时,它应该调用两个回调之一:
    在这里插入图片描述

61.2 Promise 对象属性

  • JavaScript Promise 对象可以是:

Pending
Fulfilled
Rejected

  • Promise 对象支持两个属性:stateresult

  • Promise 对象 “pending”(工作)时,结果是 undefined

  • Promise 对象 “fulfilled” 时,结果是一个值。

  • 当一个 Promise 对象是 “rejected” 时,结果是一个错误对象。
    在这里插入图片描述

  • 您无法访问 Promise 属性 stateresult

  • 您必须使用 Promise 方法来处理 Promise

61.3 如何使用 Promise

  • Promise.then() 有两个参数,一个是成功时的回调,另一个是失败时的回调。

  • 两者都是可选的,因此您可以为成功或失败添加回调。

  <body><p id="demo"></p><script>function myDisplayer(some) {document.getElementById("demo").innerHTML = some;}let myPromise = new Promise(function (myResolve, myReject) {let x = 0;if (x == 0) {myResolve("OK");} else {myReject("Error");}});myPromise.then(function (value) {myDisplayer(value);},function (error) {myDisplayer(error);});</script></body>

输出:OK

61.3 JavaScript Promise 实例

(1) 等待超时:等待 3 秒(3000 毫秒)让此页面发生变化:

  • 使用回调的写法:
<body><p id="demo"></p><script>setTimeout(function () {myFunction("I Love You!");}, 3000);function myFunction(value) {document.getElementById("demo").innerHTML = value;}</script></body>
  • 使用Promise的写法:
 <body><p id="demo"></p><script>let myOromise = new Promise(function (mySuccess, myFaile) {setTimeout(function () {myFunction("I Love You!");}, 3000);});function myFunction(vaslue) {document.getElementById("demo").innerHTML = vaslue;}</script></body>

(2)等待文件:

  • 使用回调的用法:
<body><p id="demo"></p><script>function myFunction(vaslue) {document.getElementById("demo").innerHTML = vaslue;}function getFile(myCallback) {let req = new XMLHttpRequest();req.open("GET", "mycar.html");req.onload = function () {if (req.status == 200) {myCallback(req.responseText);} else {myCallback("error" + req.status);}};req.send();}getFile(myFunction);</script></body>
  • 使用Promise的写法:
 <body><p id="demo"></p><script>function myFunction(vaslue) {document.getElementById("demo").innerHTML = vaslue;}let myPromise = new Promise(function (mySuccess, myFailed) {let req = new XMLHttpRequest();req.open("GET", "mycar.html");req.onload = function () {if (req.status == 200) {myFunction(req.responseText);} else {myFailed("Error" + req.status);}};req.send();});myPromise.then(function (value) {myFunction(value);},function (error) {myFunction(error);});</script></body>

62 、JavaScript Async

62.1 Async 语法:

async function myFunction() {return "Hello";
}

等同于:

async function myFunction() {return Promise.resolve("Hello");
}

以下是使用 Promise 的方法:

myFunction().then(function(value) { /* 成功时的代码 */ },function(error) { /* 出错时的代码 */ }
);

示例:

  <body><p id="demo"></p><script>function myPrint(vaslue) {document.getElementById("demo").innerHTML = vaslue;}async function myFunction() {return "Hello";}myFunction().then(function (vaslue) {myPrint(vaslue);},function (error) {myPrint(error);});</script></body>

或者更简单,因为您期望正常值(正常响应,而不是错误):

  <body><p id="demo"></p><script>function myPrint(vaslue) {document.getElementById("demo").innerHTML = vaslue;}async function myFunction() {return "Hello";}myFunction().then(function (vaslue) {myPrint(vaslue);}// function (error) {//   myPrint(error);// });</script></body>

62.2 Await 语法

  • 函数前的关键字 await 使函数等待 promise
let value = await promise;
  • await 关键字只能在 async 函数中使用。

(1)示例: 基础语法:

  <body><p id="demo"></p><script>async function myFunction() {let myPromise = new Promise(function (mySuccess, myFailed) {mySuccess("I Love You");});document.getElementById("demo").innerHTML = await myPromise;}myFunction();</script></body>

(2) 等待超时:

  <body><p id="demo"></p><script>async function myFunction() {let myPromise = new Promise(function (mySuccess, myFailed) {setTimeout(function () {mySuccess("I Love You");}, 3000);});document.getElementById("demo").innerHTML = await myPromise;}myFunction();</script></body>

(3)等待文件:

<body><h2>JavaScript async / await</h2><p id="demo"></p><script>
async function getFile() {let myPromise = new Promise(function(myResolve, myReject) {let req = new XMLHttpRequest();req.open('GET', "/demo/js/mycar.html");req.onload = function() {if (req.status == 200) {myResolve(req.response);} else {myResolve("File not Found");}};req.send();});document.getElementById("demo").innerHTML = await myPromise;
}getFile();
</script></body>

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

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

相关文章

C#实现数据采集系统-ModbusTCP查询报文分析和实现、通信实现、测试项目

ModbusTcp的应用 Modbus是工业通信协议中广泛使用的协议,大部分设备都支持。Modbus TCP是一种基于TCP/IP网络的工业通信协议,它是Modbus协议的一种变种,专门设计用于在网络上传输数据。 Modbus TCP/IP保留了Modbus串行协议的数据结构和功能特性,同时利用了TCP/IP网络的高…

什么是 std::ios::sync_with_stdio(false)

介绍 std::ios::sync_with_stdio(false) 是 C 中的一个配置设置&#xff0c;用于控制标准 I/O 流&#xff08;如 std::cin, std::cout&#xff09;的行为。这个设置主要用于优化输入输出操作的性能&#xff0c;尤其是在处理大量数据时。 在 C 中&#xff0c;标准流库&#xf…

stm32:CAN通讯

目录 介绍 协议层 CAN的 帧/报文 种类 数据帧 远程帧&#xff08;遥控帧&#xff09; 错误帧 过载帧 帧间隔 总线仲裁 stm32的CAN外设 工作模式 测试模式 功能框图 时序 标准时序 例子 环回静默模式测试 寄存器代码 HAL版本 介绍 一种功能丰富的车用总线标…

24暑假算法刷题 | Day15 | LeetCode 110. 平衡二叉树,257. 二叉树的所有路径,404. 左叶子之和,222. 完全二叉树的节点个数

目录 110. 平衡二叉树题目描述题解 257. 二叉树的所有路径题目描述题解 404. 左叶子之和题目描述题解 222. 完全二叉树的节点个数题目描述题解 110. 平衡二叉树 点此跳转题目链接 题目描述 给定一个二叉树&#xff0c;判断它是否是平衡二叉树 平衡二叉树 是指该树所有节点的…

Redis-布隆过滤器(Bloom Filter)详解

文章目录 什么是布隆过滤器 布隆过滤器的优点&#xff1a;布隆过滤器的缺点&#xff1a;其他问题 布隆过滤器适合的场景布隆过滤器原理 数据结构增加元素查询元素删除元素 如何使用布隆过滤器 Google开源的Guava自带布隆过滤器Redis实现布隆过滤器 Redis中配置布隆过滤器Redis…

【echarts】tooltip 增加单位

单个柱子 const data [{value: 1,per: 2},{value: 22,per: 2},{value: 222,per: 3} ];tooltip: {trigger: axis,show: true,axisPointer: {type: line,lineStyle: {color: rgba(0, 0, 0, 0.03),type: solid,width: 60,},},formatter(params) {return ${params[0].name}: ${par…

数据结构历年考研真题对应知识点(树、森林)

目录 5.4.2树、森林与二叉树的转换 1.树转换为二叉树 【树和二叉树的转换及相关性质的推理(2009、2011)】 2.森林转换为二叉树 【森林和二叉树的转换及相关性质的推理(2014)】 3.二叉树转换为森林 【由遍历序列构造一棵二叉树并转换为对应的森林(2020、2021)】 5.4.3树和…

C# 各版本语法新功能汇总

C# 8.0 以后 官网 C# 7.3 》》in C# 7.2 》》 命名参数、具名参数 》》》 条件 ref 表达式 C# 7.1 》》 default 运算符 default 在C#7.1中得到了改进&#xff0c;不再需要default&#xff08;T&#xff09;了 //变量赋值C#7.0 var s "字符串"; s default(s…

LeetCode 算法:电话号码的字母组合 c++

原题链接&#x1f517;&#xff1a;电话号码的字母组合 难度&#xff1a;中等⭐️⭐️ 题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 …

SpringCloud教程 | 第九篇: 使用API Gateway

1、参考资料 SpringCloud基础篇-10-服务网关-Gateway_springcloud gateway-CSDN博客 2、先学习路由&#xff0c;参考了5.1 2.1、建了一个cloudGatewayDemo&#xff0c;这是用来配置网关的工程&#xff0c;配置如下&#xff1a; http://localhost:18080/aaa/name 该接口代码如…

git clone命令, 克隆远程仓库

这个应该是最简单的命令&#xff0c;当别人扔给你一个*****.git链接&#xff0c;你要知道怎么用&#xff0c;但是还需要注意以下几点&#xff1a; 1. 你在该网站上是否有账号 2. 你在该网站上的账号是否是该项目的成员&#xff0c;如果不是&#xff0c;那可能clone不了 3. 本机…

WSL-Ubuntu20.04部署环境配置

1.更换Ubuntu软件仓库镜像源 为了在WSL上使用TensorRT进行推理加速&#xff0c;需要安装以下环境&#xff0c;下面将按以下顺序分别介绍安装、验证以及删除环境&#xff1a; #1.C环境配置 gcc、gdb、g #2.gpu环境 cuda、cudnn #3.Cmake环境 CMake #4.OpenCV环境 OpenCV #5.Ten…

vxe-grid 实现配置式form搜索条件 form搜索条件框可折叠 配置式table

文章目录 效果图代码 效果图 代码 <template><div class"app-container"><vxe-grid refxGrid v-bind"gridOptions" v-if"tableHeight" :height"tableHeight"><template #billDate"{ data }"><e…

Zoom视频会议软件使用

Zoom是一款广受欢迎的视频会议软件&#xff0c;使用它可以轻松地进行远程会议、在线培训和团队协作等。要充分利用Zoom软件的功能&#xff0c;以下是详细具体的使用方法和步骤&#xff1a; 下载安装 下载&#xff1a;访问Zoom官方网站&#xff0c;根据使用的操作系统下载相应的…

ttkefu在线客服系统 机器人+人工客服 全渠道接入客户咨询

ttkefu在线客服系统是一种集成了机器人客服与人工客服&#xff0c;并支持全渠道接入客户咨询的综合解决方案。这种系统能够显著提升客户服务效率&#xff0c;优化客户体验&#xff0c;同时帮助企业降低运营成本 1. 智能机器人客服 自动回复&#xff1a;机器人客服能够自…

自制连点器

B站使用教程&#xff1a;https://www.bilibili.com/video/BV1SR85e4EKw/?vd_source47eba1800d831e86d4778a128740fe73 下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1Spv_yVPFB3zoS__VL-nhaQ?pwdyxo1 提取码&#xff1a;yxo1

20.x86游戏实战-远线程注入的实现

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

Spring AI 应用开发中设置访问 Ollama 的超时时间

使用 Spring AI 开发 AI 应用时&#xff0c;Ollama 通常在本地开发和测试时使用&#xff0c;用来在本地运行大模型。由于本地开发机器的资源限制&#xff0c;当使用 Ollama 运行较大的模型时&#xff0c;大模型给出响应的时间会比较长。Spring AI 提供的 OllamaChatModel 与 Ol…

在Mac上免费恢复误删除的Word文档

Microsoft Word for Mac是一个有用的文字处理应用程序&#xff0c;它与Microsoft Office套件捆绑在一起。该软件的稳定版本包括 Word 2019、2016、2011 等。 Word for Mac 与 Apple Pages 兼容;这允许在不同的操作系统版本中使用Word文档&#xff0c;而不会遇到任何麻烦。 与…

【数据结构】非线性表----树详解

树是一种非线性结构&#xff0c;它是由**n&#xff08;n>0&#xff09;**个有限结点组成一个具有层次关系的集合。具有层次关系则说明它的结构不再是线性表那样一对一&#xff0c;而是一对多的关系&#xff1b;随着层数的增加&#xff0c;每一层的元素个数也在不断变化&…