javascript - 如何实现对象内部插槽属性
问题描述
我认识到一些Javascript对象有一些内部插槽属性,用方括号[[ ]]包围,并且只能通过方法访问。
例如:
var str = new String('example');
检查 variablestr
时,我看到属性[[PrimitiveValue]]具有示例值,但我无法访问此属性,因为它是内部的。仅通过方法访问它的toString()
唯一方法。
我的问题是:我怎样才能实现具有这种行为的自定义对象?拥有一个带有[[ ]]环绕的内部属性和一个访问该属性的方法。
解决方案
var SLOT = require('internal-slot');
var assert = require('assert');
var o = {};
assert.throws(function () { SLOT.assert(o, 'foo'); });
assert.equal(SLOT.has(o, 'foo'), false);
assert.equal(SLOT.get(o, 'foo'), undefined);
SLOT.set(o, 'foo', 42);
assert.equal(SLOT.has(o, 'foo'), true);
assert.equal(SLOT.get(o, 'foo'), 42);
assert.doesNotThrow(function () { SLOT.assert(o, 'foo'); });
推荐阅读
- swift - 在 SwiftUI 中设置文本样式
- javascript - 如何在 Postgresql 或 Javascript 中将“2021-3-31 15:51:38”转换为“2021-3-31 15:51:38”而不是“2021-3-31 3:51:38”
- java - 通过java发送graphQL查询时出现“必须指定输入值”错误
- xml - 如何从 SPARK SCALA 中的 XML 模式中获取列名?
- fhir-server-for-azure - 使用 azure cosmos db 更改源进行低级故障转移复制
- jpa - sql 查询需要等效的 JPA 查询
- haskell - Haskell:具有长度,总和,列表平方和的累加器
- java - 配置文件取决于 Java EE 中的环境变量
- java - 我正在 android studios 中制作一个应用程序,我想要一个 instagram 功能
- laravel - laravel 与 mongoDB,建立连接时出现问题