我有兴趣创建一个可以单独处理不同类型的键的对象,而不是将它们全部转换为字符串。我想知道是否可以使用代理或任何其他相对较新的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
我只想控制属性名称转换为特定对象的字符串。如果不是一种直截了当的方式,那么我也会接受创意黑客攻击。
答案 0 :(得分:0)
通过正常的财产访问,例如foo.bar
和foo[thing]
,在对象本身甚至知道存在访问权限之前,密钥将转换为字符串。代理上的get
陷阱只能在点之后访问它,因此可以保证字符串或符号。
如果您有兴趣,可以看到in the spec for property access在步骤(6)中将其转换为字符串。实际访问该属性的逻辑直到很久以后才会发生,并且不知道字符串化密钥的来源。
你能做的最好的就是使用自己的功能,例如: proxy.readKey(name)
显然name
可以是任何值。正如评论中所提到的,这类似于用于ES6 Map
实例的接口。