ES12 中的 Reference-able Exotic Objects 详解

在 ES12 中,Reference-able Exotic Objects 是一个新增的概念。这个概念可以让开发者更好的理解 JS 中的对象,并有助于提高代码的可读性和可维护性。

什么是 Reference-able Exotic Objects?

Reference-able Exotic Objects 是一种特殊类型的对象,它们提供了一些自定义的行为,使其能够像普通对象一样被引用和操作。与普通对象不同的是,它们没有常规的内置方法,而是通过一些自定义方法来实现对象的行为。

通俗来说,它们是一种复杂的对象类型,可以被 JS 引擎用来实现一些高级数据结构和具有复杂内部状态的对象。

Reference-able Exotic Objects 的特征

  1. 具有唯一的内部状态,无法通过普通的属性访问和修改;
  2. 可以像普通对象一样通过引用(Reference)进行传递和操作;
  3. 通过一些自定义方法来实现对象的行为;
  4. 不能被继承,也不能作为父类。

Reference-able Exotic Objects 的分类

在 ES12 中,Reference-able Exotic Objects 可以分为几类:

  1. Map Objects:ES6 引入的 Map 类型;
  2. Set Objects:ES6 引入的 Set 类型;
  3. WeakMap Objects:ES6 引入的 WeakMap 类型;
  4. WeakSet Objects:ES6 引入的 WeakSet 类型;
  5. ArrayBuffer Objects:提供一种底层的二进制数据存储方式;
  6. DataView Objects:提供一种跨字节访问 ArrayBuffer 数据的方式;
  7. TypedArray Objects:一组被设计用于协同工作的数据类型,共享 ArrayBuffer 作为它们的内部存储;
  8. Proxy Objects:为对象提供了动态代理的功能。

示例代码

下面是一个使用 Proxy 对象实现的简单事件处理程序的示例代码:

--- ------ - --- --------- -
  ---- ---------------- ------ --------- -
    -- -------- -- --------
      ------------- - ---
    ------ ---------- -
      --------------------------------------- -
        ----------------------- -----------
      ---
    --
  -
---

------------- - ------------ -
  -------------------- - --- ------ ---- -- --------
--

------------- - ------------ ------ -
  -------------------- ------ ---- -- ----- ---- --- ------------ -------
--

------------- - ------------ -
  -------------------- ------ ---- -- --------
--

-----------------
---------------- - ----- ------ ---- -- ---
-----------------

在上面这个例子中,我们创建了一个空的对象 events,然后使用 Proxy 对象为它提供了 get 方法用于捕获该对象的属性访问。当一个属性被访问时,我们通过检查该属性是否存在,然后为它添加一个空数组来创建一个新的事件。

我们使用一个类似事件的方式来关联钩子函数。在 createupdatedelete 方法被调用时,它们会自动将传入的参数执行,然后调用订阅该事件的所有处理程序。通过使用 Reference-able Exotic Objects,我们可以很容易地管理我们的事件的处理程序,并可以通过这种方式来实现高级的事件处理系统。

总结

Reference-able Exotic Objects 是 ES12 新增的一个概念,它们是一种自定义行为的对象类型,可以用于实现高级数据结构和具有复杂内部状态的对象。它们具有唯一的内部状态,可以像普通对象一样通过引用进行传递和操作,并且通过一些自定义方法来实现对象的行为。掌握它们的概念和分类,在编程中可以更加灵活地运用 JavaScript 对象。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6530bf2f7d4982a6eb24e719


猜你喜欢

  • 响应式设计中使用 bootstrap-datepicker 插件实现日历控件的设计

    在前端开发中,响应式设计越来越受到关注。而日历控件在很多项目中都是必须的一个功能。那么怎么在响应式设计中实现一个好用的日历控件呢?这里我将介绍如何使用 bootstrap-datepicker 插件实...

    1 年前
  • ReactNative+Redux 实战:构建大型移动端应用

    ReactNative 和 Redux 是当前前端技术领域的热门话题。组合使用这两个框架,能够快速方便地构建出纯原生的移动端应用,提高开发效率和用户体验。本文将详细介绍如何使用 ReactNative...

    1 年前
  • ES11: 可选链操作符 Optional Chaining Operator

    在 JavaScript 中,很多时候我们需要访问对象或者数组的某个属性或者方法。但是有时候我们不知道对象或者数组是否存在某个属性或者方法,这时候就需要加上一些判断。

    1 年前
  • Kubernetes 下的 Pod Network Namespace 详解

    在 Kubernetes 中,网络是非常重要的一部分,它承载着大量的数据和服务流量。在 Kubernetes 中,每个 Pod 都有自己的 IP 地址,而 Pod Network Namespace ...

    1 年前
  • 报告!Ftrybe 上线了(koa + mongodb +redis+ webpack)

    最近,我们团队开发了一款前端学习网站 Ftrybe,采用了 Koa、MongoDB、Redis、Webpack 等前端常用技术栈进行开发。本文将详细介绍 Ftrybe 的架构和技术实现,并给大家分享一...

    1 年前
  • 使用 Redis 实现短链接系统:常见措施与遇到问题的处理

    如今,在互联网上,短链接系统已经成为了一种非常受欢迎的服务。它可以将一个较长的 URL 缩短为一个短链接,从而方便用户保存、分享,同时也可以有效降低 URL 的长度对存储空间的占用。

    1 年前
  • 如何在 React 项目中使用 ESLint 和 Babel

    ESLint 和 Babel 是 React 开发中必不可少的两个工具。ESLint 是 JavaScript 代码语法规范检查工具,而 Babel 则是 JavaScript 代码转换工具。

    1 年前
  • 网格布局中如何使用自定义网格单元?

    随着CSS Grid布局的到来,Web开发人员可以更轻松地创建网格化布局来构建复杂的页面布局。在网格布局中,自定义网格单元是一个非常实用的方法来构建可复用和可扩展的页面组件。

    1 年前
  • Socket.io 如何处理服务器性能瓶颈导致的断开连接问题

    Socket.io 是一个用于实时通信的库,它支持服务器和客户端之间的双向通信。在使用 Socket.io 进行实时通信时,我们经常会遇到服务器性能瓶颈导致的断开连接问题。

    1 年前
  • Hapi.js 项目调试与性能优化的实践与总结

    在前端开发过程中,性能优化和调试是必不可少的环节。Hapi.js 是一个功能强大、可扩展的 Node.js 框架,它为开发者提供了简单但强大的工具,以便于构建可维护和可扩展的 Web 应用程序。

    1 年前
  • RxJS 中如何使用 switchMapTo() 操作符处理常量数据流

    RxJS 是一个在前端开发中越来越受欢迎的库,其强大的功能和简单易用的接口让许多开发者爱不释手。其中,switchMapTo() 操作符是一种非常实用的工具,可用于处理常量数据流,使其更加高效和稳定。

    1 年前
  • Cypress 自动化测试:如何检测网络请求?

    随着前端技术的日益发展,我们越来越依赖前端自动化测试工具来保证我们的代码质量和程序的稳定性。其中,Cypress 就是一个非常优秀的自动化测试工具。在进行前端自动化测试的过程中,我们可能会遇到需要检测...

    1 年前
  • 如何在 RESTful API 中使用 SOAP 协议

    如何在 RESTful API 中使用 SOAP 协议 随着需求和技术的不断发展,RESTful API 已经成为了现代应用程序的标配,但是,仍有一些遗留的系统和组织仍然使用 SOAP 协议。

    1 年前
  • 利用 Custom Elements 实现手机短信验证码组件及提高用户体验

    在前端开发中,短信验证码组件是常见的表单组件之一。常规实现方式是通过 HTML、CSS 和 JavaScript 编写复杂的样式和逻辑代码。但是,通过使用 Custom Elements,可以将短信验...

    1 年前
  • SASS 与 Gulp 集成的教程

    SASS 是一种 CSS 预处理器,它为 CSS 添加了许多便利的特性和编程思想。而 Gulp 则是一种自动化构建工具,可以让前端开发者自动化地完成各种繁琐的构建任务。

    1 年前
  • Mongoose 中的地理空间查询及相关操作示例

    前言 在开发 Web 应用程序中,有时需要查询附近地点。Mongoose 是一个为 Node.js 设计的优秀的 MongoDB 驱动程序,它支持地理空间查询,可以轻松的实现附近地点的查询、区域查询以...

    1 年前
  • 如何在 Deno 中使用 Kafka 实现消息队列

    Kafka 是一款高性能、高可扩展性的分布式消息系统,被广泛应用于消息队列、日志收集等场景。在现代应用开发中,消息队列已成为不可或缺的一环,既能实现异步处理,也能解耦系统架构。

    1 年前
  • ECMAScript 2021 (ES12) 中的 String.prototype.trim 方法解决字符串空格问题

    在前端开发中,字符串处理一直是一个重要的而且很基本的需求。例如,在用户输入表单数据时,如果用户不小心输入了额外的空格,这可能会引发很多问题,因为这些额外的空格会对数据的处理和验证造成干扰。

    1 年前
  • 如何在 React Native 项目中使用 Babel-plugin-transform-remove-console?

    在前端开发中,console.log() 函数通常用于输出日志和调试代码。然而,在发布产品时,输出日志可能会导致一些安全问题或性能问题。因此,我们需要使用 babel-plugin-transform...

    1 年前
  • ES8 的 Object.getOwnPropertyDescriptors() 方法解析

    ES8(ECMAScript 2017)引入了一个新的静态方法:Object.getOwnPropertyDescriptors(),它允许我们获取对象的所有属性描述符。

    1 年前

相关推荐

    暂无文章