是否可以控制对象属性名称如何在JavaScript中转换为字符串?

时间:2018-03-07 22:56:40

标签: javascript ecmascript-6 properties proxy

我有兴趣创建一个可以单独处理不同类型的键的对象,而不是将它们全部转换为字符串。我想知道是否可以使用代理或任何其他相对较新的JavaScript功能来实现此目的。如果我做了像

这样的事情
new_list = list.to_frame().apply(lambda x: x/x[0])

然后尝试访问const handler = { get: function(target, name) { return typeof(name); } }; const proxy = new Proxy({}, handler); 它返回proxy[1]作为类型。我理解为什么会发生这种情况,但我很好奇是否有任何方式可以加入此类型转换并控制它。我知道我可以覆盖string,但我想在处理属性名称时修改此行为。理想情况下,我会想要类似的东西。

Number.prototype.toString

我只想控制属性名称转换为特定对象的字符串。如果不是一种直截了当的方式,那么我也会接受创意黑客攻击。

1 个答案:

答案 0 :(得分:0)

通过正常的财产访问,例如foo.barfoo[thing],在对象本身甚至知道存在访问权限之前,密钥将转换为字符串。代理上的get陷阱只能在点之后访问它,因此可以保证字符串或符号。

如果您有兴趣,可以看到in the spec for property access在步骤(6)中将其转换为字符串。实际访问该属性的逻辑直到很久以后才会发生,并且不知道字符串化密钥的来源。

你能做的最好的就是使用自己的功能,例如: proxy.readKey(name)显然name可以是任何值。正如评论中所提到的,这类似于用于ES6 Map实例的接口。