【ECMAScript6_6】async 函数、Class、Module、异步遍历器、ArrayBuffer、Decorator装饰器

这篇具有很好参考价值的文章主要介绍了【ECMAScript6_6】async 函数、Class、Module、异步遍历器、ArrayBuffer、Decorator装饰器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、async 函数
async 函数是什么?一句话,它就是 Generator 函数的语法糖。async函数就是将 Generator 函数的星号(*)替换成async,将yield替换成await,仅此而已。
async函数自带执行器,只要调用了asyncReadFile函数,它就会自动执行,输出最后结果。不像 Generator 函数,需要调用next方法,或者用co模块。

const asyncReadFile = async function () {
  const f1 = await readFile('/etc/fstab');
  const f2 = await readFile('/etc/shells');
  console.log(f1.toString());
  console.log(f2.toString());
};

async表示函数里有异步操作,await表示紧跟在后面的表达式需要等待结果。
async函数的返回值是 Promise 对象,这比 Generator 函数的返回值是 Iterator 对象方便多了。你可以用then方法指定下一步的操作。
进一步说,async函数完全可以看作多个异步操作,包装成的一个 Promise 对象,而await命令就是内部then命令的语法糖。
async函数返回的 Promise 对象,必须等到内部所有await命令后面的 Promise 对象执行完,才会发生状态改变,除非遇到return语句或者抛出错误。
错误处理:如果await后面的异步操作出错,那么等同于async函数返回的 Promise 对象被reject。

2、Class
类的所有方法都定义在类的prototype属性上面。

Point.prototype = {
  constructor() {},
  toString() {},
  toValue() {},
};

在类的实例上面调用方法,其实就是调用原型上的方法。

>b.constructor === B.prototype.constructor // true

ES2022正式为class添加了私有属性,方法是在属性名之前使用#表示。
ES2022 引入了静态块(static block),主要作用是对静态属性进行初始化。只运行一次。以后,新建类的实例时,这个块就不运行了。
类不存在变量提升。
ES6 为new命令引入了一个new.target属性,该属性一般用在构造函数之中,返回new命令作用于的那个构造函数。
继承:Object.getPrototypeOf()方法可以用来从子类上获取父类。

Object.getPrototypeOf(ColorPoint) === Point  // true

可以使用这个方法判断,一个类是否继承了另一个类。
子类的__proto__属性,表示构造函数的继承,总是指向父类。
子类prototype属性的__proto__属性,表示方法的继承,总是指向父类的prototype属性。

B.__proto__ === A // true
B.prototype.__proto__ === A.prototype // true

extends还可以继承原生构造函数。原生构造函数包括:Boolean()、Number()、String()、Array()、Date()、Function()、RegExp()、Error()、Object()
Mixin 模式的实现 :Mixin 指的是多个对象合成一个新的对象,新对象具有各个组成成员的接口。使用的时候,只要继承mix类即可。

3、Module
ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。
模块功能主要由两个命令构成:export和import。export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。
一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。
export和import语句可以结合在一起,写成一行。但需要注意的是,写成一行以后,foo和bar实际上并没有被导入当前模块,只是相当于对外转发了这两个接口,导致当前模块不能直接使用foo和bar。

export { foo, bar } from 'my_module';
// 可以简单理解为
import { foo, bar } from 'my_module';
export { foo, bar };

import()加载模块成功以后,这个模块会作为一个对象,当作then方法的参数。因此,可以使用对象解构赋值的语法,获取输出接口。

4、异步遍历器
新引入的for await…of循环,则是用于遍历异步的 Iterator 接口。

async function f() {
  for await (const x of createAsyncIterable(['a', 'b'])) {
    console.log(x);
  }
}

上面代码中,createAsyncIterable()返回一个拥有异步遍历器接口的对象,for…of循环自动调用这个对象的异步遍历器的next方法,会得到一个 Promise 对象。
await用来处理这个 Promise 对象,一旦resolve,就把得到的值(x)传入for…of的循环体。
异步 Generator 函数的作用,是返回一个异步遍历器对象。在语法上,异步 Generator 函数就是async函数与 Generator 函数的结合。
异步遍历器的设计目的之一,就是 Generator 函数处理同步操作和异步操作时,能够使用同一套接口。
yield*语句也可以跟一个异步遍历器。

5、ArrayBuffer对象代表原始的二进制数据,TypedArray视图用来读写简单类型的二进制数据,DataView视图用来读写复杂类型的二进制数据。它们都提供一些方法。
二进制数组并不是真正的数组,而是类似数组的对象。

6、Decorator装饰器
装饰器是一种函数,写成@ + 函数名,可以用来装饰四种类型的值:类、类的属性、类的方法、属性存取器(accessor)
装饰器函数有两个参数。运行时,JavaScript 引擎会提供这两个参数。
value:所要装饰的值,某些情况下可能是undefined(装饰属性时)。
context:上下文信息对象。context也有很多属性。

装饰器的执行步骤如下:
计算各个装饰器的值,按照从左到右,从上到下的顺序。
调用方法装饰器。
调用类装饰器。
装饰器只能用于类和类的方法,不能用于函数,因为存在函数提升。文章来源地址https://www.toymoban.com/news/detail-575941.html

到了这里,关于【ECMAScript6_6】async 函数、Class、Module、异步遍历器、ArrayBuffer、Decorator装饰器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端】ECMAScript6从入门到进阶

    1.ES6简介及环境搭建 1.1.ECMAScript 6简介 (1)ECMAScript 6是什么 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。 (2)ECMAScript 和 JavaScript 的关系 E

    2024年02月07日
    浏览(40)
  • ECMAScript6和其常量变量的声明

    目录 1.介绍 2.babel--ES6代码转换为ES5的代码 1.安装转码工具 2.安装转换规则 3.指定转换规则 新建.babelrc 4.也可以将ES6转换为ES5之后的文件输入到另一个文件当中 5.将整个src目录下的es6文件转换成es5文件到dist目录 ​3.模块化 1-module1.js 2-module2.js ES6导出的是一个接口,接口存放的

    2024年02月15日
    浏览(39)
  • 一段代码理解Python异步函数async的基本用法

    异步函数的使用规则 正常情况下我们的函数时串行的运行的,这里称之为主函数. 异步函数:与主函数并行运行. Python异步函数即async必须在普通函数的命名前加上 async 示例: 执行async函数 async函数内等待:只阻塞当前async函数 m_mock安装 通过上述代码示例可以发现case_a和case_b通过

    2024年02月15日
    浏览(51)
  • CoroutineScope Dispatchers.IO异步操作async返回函数,Kotlin

              主流程开始 ... 1703757127994 分支myFun开始... 1703757127995 分支myFun结束 1703757128042 主流程结束 1703757128042 myFun launch... 1703757128045 myFun delay... 1703757128046 myFun delay end 1703757131050 主流程等待结果返回... main : 3 1703757131052 主流程结果返回 myFun retFun 1703757131052 Process finished with

    2024年02月02日
    浏览(44)
  • @Async异步线程:Spring 自带的异步解决方案

            在项目应用中,使用MQ异步调用来实现系统性能优化,完成服务间数据同步是常用的技术手段。如果是在同一台服务器内部,不涉及到分布式系统,单纯的想实现部分业务的异步执行,这里介绍一个更简单的异步方法调用。         对于异步方法调用,从Spring3 开

    2023年04月24日
    浏览(63)
  • SpringBoot--@Async异步

    包 注解 整体 异步类需要交给Spring管理 @Component 异步方法需要@Async修饰

    2024年02月11日
    浏览(41)
  • SpringBoot中异步注解@Async介绍

    介绍在SpringBoot项目中,使用@Async不生效的原因介绍和分析; 代码参考gitee仓库:spring-boot-2022-05: 主要是介绍Spring框架注解、常用的功能的使用案例,记录平时遇到的技术知识点,进行实践操作; - Gitee.com 1.启动类中没有添加注解@EnableAsync; 2.同一个类中调用含有@Async的方法;因

    2023年04月17日
    浏览(35)
  • HarmonyOS通过async与await同异步转换 解决异步回调地狱

    我在 HarmonyOS 发送http网络请求 中讲述了 HTTP请求的基本方式 然后 就带出了 回调地狱的问题 然后 上文 HarmonyOS 通过Promise 解决异步回调地狱问题 我们用Promise的解决方案 搞定了 这个问题 但是 Promise 这种写法 可读性其实没有那么优秀 没有搞定 Promise return规则的人甚至都看不懂

    2024年01月24日
    浏览(46)
  • springboot @Async 异步调用接口处理数据

    @Async 异步背景 新增的数据需要分发给下游业务系统,由于下游业务系统状态未知,所以需要异步发送数据给下游业务系统。 系统生效按钮---controller新增--异步调用servcie---数据集成 在springboot框架中实现步骤 首先在启动类上加上 @EnableAsync 注解开启项目的异步调用功能,其次

    2024年02月16日
    浏览(42)
  • promise及异步编程async await

    ECMAScript 6 新增了正式的 Promise(期约)引用类型,支持优雅地定义和组织异步逻辑。接下来几个版本增加了使用 async 和 await 定义异步函数的机制 JavaScript 是单线程事件循环模型。异步行为是为了优化因计算量大而时间长的操作,只要你不想为等待某个异步操作而阻塞

    2024年02月04日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包