首页 > 解决方案 > 如何实现对象内部插槽属性

问题描述

我认识到一些Javascript对象有一些内部插槽属性,用方括号[[ ]]包围,并且只能通过方法访问。

例如:

var str = new String('example');

检查 variablestr时,我看到属性[[PrimitiveValue]]具有示例值,但我无法访问此属性,因为它是内部的。仅通过方法访问它的toString()唯一方法。

我的问题是:我怎样才能实现具有这种行为的自定义对象?拥有一个带有[[ ]]环绕的内部属性和一个访问该属性的方法。

标签: javascriptnode.jsinternalobject-property

解决方案


From this shim on Github:

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'); });

推荐阅读