ES6 WeakMap 类封装

2024-04-11

我试图理解为什么我需要使用 Wea​​kMaps 来创建私有类成员,而不是仅仅使用普通变量。它们都使用闭包和模块导入来创建封装。

(function encapsulation() {
  const my_var = 'My secret info';
  const my_var2 = new WeakMap();

  class Test {
    constructor() {
      my_var2.set(this, 'My secret info 2');
      console.log(my_var); // My secret info
      console.log(my_var2.get(this)); // My secret info 2
    }
  }

  const t = new Test();
})();


console.log(my_var); // undefined
console.log(my_var2); // undefined

// Same result!

普通变量的问题,例如my_var是它只会保存该类的单个实例化的数据:

const Test = (function encapsulation() {
  let my_var = 'My secret info';

  class Test {
    constructor(param) {
      my_var = param;
    }
    getInfo() {
      return my_var;
    }
  }
  return Test;
})();

const t1 = new Test('foo');
const t2 = new Test('bar');
console.log(t1.getInfo());
// the above returns 'bar'... uh oh, but we passed in 'foo' to `t1`! Our data is lost!
console.log(t2.getInfo()); // 'bar'

因此,需要一个WeakMap,保存单独的数据每个实例化:

const Test = (function encapsulation() {
  const my_var2 = new WeakMap();

  class Test {
    constructor(param) {
      my_var2.set(this, param);
    }
    getInfo() {
      return my_var2.get(this);
    }
  }
  return Test;
})();

const t1 = new Test('foo');
const t2 = new Test('bar');
console.log(t1.getInfo()); // 'foo', as expected
console.log(t2.getInfo()); // 'bar', as expected
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES6 WeakMap 类封装 的相关文章

  • 有没有办法根据渲染的字符串创建 DOM 对象?

    有没有办法从整个字符串而不只是innerHTML 创建DOM 对象 我有一个完整呈现的 DOM 形式的字符串
  • 带有闭包的 JavaScript 性能

    var name function n var digits one two three four return digits n var namenew function digits one two three four return
  • Amazon Lex 和 BotFramework 集成 TypeError:无法对已在响应中撤销的代理执行“get”[重复]

    这个问题在这里已经有答案了 我正在进行概念验证 尝试将 BotFramework 与 Amazon lex 集成 并最终将机器人集成到 Microsoft 团队渠道 AWS SDK 用于调用 Amazon Lex 自动程序 async ca
  • 使用 Jquery 附加链接

    我正在尝试根据您所在的页面添加指向我的页面的链接 我使用 Squarespace 来构建这个网站 因此对我来说最简单的方法是使用 Javascript 或 Jquery 我认为我缺少的这个语法有问题 我已经尝试用 来打破引号 但这不起作用
  • Excel 宏与 Javascript

    我希望使用 Javascript 中的宏而不是默认的 VBA 来操作 Excel 电子表格 我可以使用以下 VBA 代码执行 javascript 代码 javascript to execute Dim b As String b fun
  • 以编程方式在指令内添加指令

    我想将指令的另一个实例附加到父指令中 但我无法使用 apply 重新编译我的指令 我想我在某个地方错过了一些东西 我的 HTML 代码 div div div div
  • 我需要一个 jQuery Autocomplete 使用 ajax 返回 id 和 name 的示例

    我需要一个示例 说明如何编写 jQuery 自动完成代码来填充product id 同时显示调用ajax 页面 remote php 的product name
  • 用于传输命名参数和正文的云端点资源属性不起作用

    我正在尝试通过gapi client rpc调用实现对谷歌云端点的调用 如文档中所述 和Google Cloud Endpoints 使用 JS 客户端进行调用 传递参数和 JSON 正文 https stackoverflow com q
  • 如何解构 React props 并仍然访问其他 props?

    我很好奇如果我想要所有的 props 但也想要解构单个属性 那么组件的参数 props 是否可以像导入一样解构 我想这更像是一个 JavaScript 问题 而不是一个 React 问题 但是举个例子 import React useEff
  • 三.js环境光意想不到的效果

    在下面的代码中 我渲染了一些立方体并使用点光源和环境光照亮它们 然而 当设置为 0xffffff 时 AmbientLight 会将侧面的颜色更改为白色 无论其指定的颜色如何 奇怪的是 点光源按预期工作 我怎样才能使环境光表现得像点光 因为
  • 修剪日期格式 PrimeNG 日历 - 删除时间戳、角度反应形式

    我将以下内容推入我的反应形式 obj 中2016 01 01T00 00 00 000Z但我想要以下2016 01 01 有谁知道有一个内置函数可以实现上述目的 我已经搜索过文档here https www primefaces org p
  • 从 html5

    我正在寻找一种方法来根据用户代理字符串将控件属性添加到视频标签 我不希望在 iPad 和 Android 之外的任何浏览器或设备上出现控件属性 所以我认为用户代理是最好的识别方法 因为 ipad 和 android 一词出现在各自的 UA
  • Onblur 事件在另一个 div 的 onclick 之前触发

    如上所述 我有一个按钮 单击该按钮将打开子菜单 对于子菜单中的每个选项 都有三个元素 我认为实际上还有更多元素 但为了简单起见 将其保留为 3 我将焦点放在子菜单的主 div 白色 框架 上 Onblur 这个 div 然后我隐藏子菜单 这
  • 动态 dom 操作后,如何在浏览器历史记录中保留 dom 状态?

    是否有一个通用的解决方案来保留 dom 状态 以便当用户使用后退 前进返回页面时 整个页面处于他们离开时的确切状态 这篇文章询问并回答了为什么不同浏览器和不同 javascript 库的行为不一致 Ajax 后退按钮和 DOM 更新 htt
  • 有没有办法从画布上清除一个元素而不消除其他元素?

    我正在使用画布构建页面加载器 并使用 es6 类 虽然目前我无法使其正常工作 原因之一是我找不到清除画布的方法进展 到目前为止 这是我的代码 class Loader constructor width height this width
  • 使用 javascript/jquery 从数据库格式化日期的正确方法

    我正在调用包含日期时间数据类型的数据库 日期看起来像这样 2005 05 23 16 06 00 000 当用户从列表中选择某个项目时 我想在表格中显示它 我调用我的控制器操作并返回所有时间的 Json 并将它们放入表中 问题是日期完全错误
  • 这个 JQuery 指令做什么 $(function(){...}) [重复]

    这个问题在这里已经有答案了 我最近一直在研究JQuery 尽管我知道一些东西 但书上有这样一句话我根本无法理解 function current entry 1 有谁知道这条线是如何工作的以及它的作用是什么 它类似于 JQuery 函数中的
  • JsGrid 将嵌套对象加载到表中

    我正在 Django 中开发一个 Web 项目并使用 jsGrid 我遇到了问题并且找不到解决方案 我有一个嵌套的 JSON 数据 它是通过组合多个数据库表记录创建的 这是我的 JSON count 3 results personnel
  • 如何调试 Node.js 应用程序?

    如何调试 Node js 服务器应用程序 现在我主要使用警报调试打印语句如下 sys puts sys inspect someVariable 一定有更好的调试方法 我知道谷歌浏览器 http en wikipedia org wiki
  • 错误:模块“html”不提供视图引擎(Express)

    我正在尝试设置一个简单的路由应用程序 但在渲染页面时不断遇到错误 Error Module html does not provide a view engine 奇怪的是我已经在 app js 文件中指定了视图引擎 但仍然收到错误 app

随机推荐

  • 轻量级、基于 PHP 的布局框架...知道吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个轻量级的 基于 PHP 的布局框架 就像 Zend Framework 如何使用布局一样 我想创建一个布局模板并仅包含必要页
  • 在 Java 中使用 AudioPlayer

    在我的 swing 应用程序中 我使用一个类在单击鼠标时播放声音 我遇到的问题是 当我调用班级时 声音会播放一次 而当突然单击另一个按钮时 它不会播放声音 我尝试在代码中给出延迟 但 id 仍然无法按我的预期工作 和线程有关系吗 我不擅长线
  • 为什么 Orion 订阅不能按我的意愿工作?

    我在 orion 1 2 1 中有以下订阅 curl include header Content Type application json request POST data binary description subscriptio
  • 正则表达式解析任意深度的函数

    我正在为其中包含的函数解析一种简单的语言 Excel 公式 函数名称必须以任意字母开头 后跟任意数量的字母 数字 并以左括号结尾 中间没有空格 例如MyFunc 该函数可以包含任何参数 包括其他函数 并且必须以右括号结尾 当然 括号内的数学
  • 如何更改多个提交按钮的值? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我如何重命名所有submit当我点击按钮时 我需要脚本 该脚本会改变submit按钮的值类似于所有按钮的 正在加载 我需要完整的 jQ
  • Visual Studio 2013 和 libpng [重复]

    这个问题在这里已经有答案了 我正在尝试使用 VS2013 在 C 中使用 libpng 编写一个简单的 PNG 文件 我从 Nuget 安装了 libpng 并包含了 png h 但无法编译 我得到这个作为我的输出 1 gt main ob
  • 在 php 文件中包含网站

    您好 我正在尝试将另一个网站的网页链接包含到我的网站中 我怎样才能做到这一点 i tried 但在此语句之后所有命令都不会加载 我想将另一个网页直接包含到我的主页中 我的主页完全是用php设计的 但是另外一个是html或者php 我也尝试过
  • 在 .NET Core csproj 文件中更改为 (复数)时出错

    我正在关注 Pluralsight 上的一个关于让 MSTest 项目同时针对 net core 2 2 和 NET 4 7 2 的教程 这需要转到我的测试项目的 csproj 文件并对其进行编辑 以便以下内容
  • Objective C 内存管理,包括块、ARC 和非 ARC

    我使用块已经有一段时间了 但我觉得在 ARC 和非 ARC 环境中 我都怀念一些关于内存管理的事情 我觉得更深层次的理解会让我避免很多内存泄漏 AFNetworking 是我在特定应用程序中对 Blocks 的主要使用 大多数时候 在操作的
  • python google Sheets API 出现无效 JSON 有效负载错误

    我正在尝试使用 Google Sheets API 将新行附加到现有的 Google Sheet 中 身份验证已成功进行 并且代码能够读取工作表的内容 但是 当我尝试使用service spreadsheets values append
  • QT5 迁移和 Boost:if.hpp:宏参数不匹配错误

    在 qt 4 8 中我使用了 boost 1 52 一切都好 现在我尝试转移到 QT5 并得到if hpp Macro argument mismatch线上错误131 BOOST MPL AUX NA SPEC 3 if 在一些QT论坛
  • 如何根据用户ID获取Firebase中任何用户的电子邮件?

    我需要获取一个用户对象 特别是用户电子邮件 我将拥有以下格式的用户 ID simplelogin 6 所以我需要写一个像这样的函数 getUserEmail simplelogin 6 那可能吗 可以通过 Admin SDK 实现 Admi
  • selenium.common.exceptions.NoSuchDriverException:消息:使用 Selenium 和 ChromeDriver 时无法使用 Selenium Manager 获取 chromedriver 错误

    我不明白为什么我的代码总是出错 这是我的代码 from selenium import webdriver url https google com path C Users thefo OneDrive Desktop summer 20
  • 通过post请求传输字典

    我正在使用 Python 并尝试通过 HTTP Post 请求向服务器发送字典 包含动态数据 最有效的实施方法是什么 Use urllib urlencode将字典编码为 POST import urllib import urllib2
  • 使用“flask run”或“python run”哪个?

    Reading http flask pocoo org docs 1 0 quickstart http flask pocoo org docs 1 0 quickstart 描述使用 flask run 来启动基于 Flask 的应用
  • 为应用程序创建自定义 odbc 驱动程序

    好的 我有一个简单的数据库引擎 它是用 vb6 编写的专有产品 用于我的一个应用程序 我想为它创建一个 ODBC 驱动程序 这样我就可以将我的一些其他应用程序 需要数据库 与我的数据库引擎而不是 microsoft sql 他们当前正在使用
  • 我怎样才能返回一个数组?

    有没有办法从函数返回数组 更具体地说 我创建了这个函数 char bin 8 for int i 7 i gt 0 i int ascii a if 2 i ascii gt 0 bin i 1 ascii 2 i ascii else b
  • 使用 Mahout 朴素贝叶斯分类器算法需要哪些步骤?

    我正在尝试使用本机贝叶斯分类器来检测欺诈交易 我在 Excel 工作表中有大约 5000 个样本数据 这是我将用于训练分类器的数据 并且我有大约 1000 个测试数据 我将在其上应用测试分类器 我的问题是 我不知道如何训练分类器 在将训练数
  • Rust 中的线程局部变量将使用多少字节?

    我想使用类型的线程局部变量Option
  • ES6 WeakMap 类封装

    我试图理解为什么我需要使用 Wea kMaps 来创建私有类成员 而不是仅仅使用普通变量 它们都使用闭包和模块导入来创建封装 function encapsulation const my var My secret info const