【问题标题】:How to implement object internal slot property如何实现对象内部插槽属性
【发布时间】:2019-01-24 01:27:24
【问题描述】:

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

例如:

var str = new String('example');

检查变量 str 时,我看到属性 [[PrimitiveValue]] 具有 example 值,但我无法访问此属性,因为它是内部的。只能通过toString() 方法访问它。

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

【问题讨论】:

  • 是JS引擎创建的吧?
  • 一个内部类会有内部属性
  • 先生我不知道它来自哪里。但是我们可以创建一个与这种行为完全相同的对象吗?
  • 您不能实现自己的类并扩展具有[[PrimitiveValue]]String 吗?
  • 我不想扩展任何可用的 Js 对象。我想创建一个新对象。例如,我使用 [[MyField]] 和 getMyField 方法创建 MyObject 来获取它的值。但不知道它是否允许这样做

标签: javascript node.js internal object-property


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-02-27
    • 2013-07-11
    • 2016-01-09
    • 2011-07-22
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多