Javascript 使用ES6代理对象从目标对象检索属性时的符号与字符串
使用以下代码:Javascript 使用ES6代理对象从目标对象检索属性时的符号与字符串,javascript,node.js,es6-proxy,Javascript,Node.js,Es6 Proxy,使用以下代码: const assrt = function () { try { return chaiAssert.apply(null, arguments); } catch (e) { return handleError(e); } }; v.assert = new Proxy(assrt, { get: function (target, prop) { if(typeof prop ===
const assrt = function () {
try {
return chaiAssert.apply(null, arguments);
}
catch (e) {
return handleError(e);
}
};
v.assert = new Proxy(assrt, {
get: function (target, prop) {
if(typeof prop === 'symbol'){
// I don't know what to do with symbols, so return
return Reflect.get(...arguments);
}
// but here! we still get properties that don't exist
if(!chaiAssert[prop]){
return handleError(
new Error(`The assertion library used does not have '${prop}' property or method.`)
);
}
return function () {
try {
return chaiAssert[prop].apply(null, arguments);
}
catch (e) {
return handleError(e);
}
}
}
});
我使用此代码得到的错误是:
TypeError:无法将符号值转换为字符串
这发生在线路上:
new Error(`The assertion library used does not have '${prop}' property or method.`));
我以前使用过代理,我从未见过符号被传递到代理的get方法。有人知道如何规避这个问题吗
为什么要将符号传递给代理get函数,以及如何正确处理这些符号?
为什么要将符号传递给代理get函数
我们不知道,您没有显示任何实际使用代理的代码。但是许多符号是通过内置方法访问的,例如,当您迭代代理时,它使用Symbol.iterator
方法
我该如何妥善处理
不能将符号与字符串连接起来,需要明确说明这一点。您可以使用prop.toString()
或仅根据prop的类型进行切换
为什么要将符号传递给代理get函数
我们不知道,您没有显示任何实际使用代理的代码。但是许多符号是通过内置方法访问的,例如,当您迭代代理时,它使用Symbol.iterator
方法
我该如何妥善处理
不能将符号与字符串连接起来,需要明确说明这一点。您可以使用prop.toString()
或仅根据typeof prop
切换发送到get函数的prop是Symbol(util.inspect.custom)
,并且认为还有其他属性也会被发送。我认为,您必须调试代码。似乎符号不必通过if(typeof prop==“symbol”){
过滤掉。发送到get函数的prop是symbol(util.inspect.custom)
,并且认为还有其他符号也会被发送。我认为,您必须调试代码。似乎符号不必通过if过滤掉(typeof prop==='symbol'){
你能通过打开typeof proptypeof prop=='symbol''来演示你的意思吗?“+prop.toString()+””:prop
或您想对符号执行的任何操作。可能只需在代理处理程序中完全忽略它们,然后使用默认的反射进行响应。为它们获取
。是的,我不知道如何处理符号,但我需要在传递符号时传回它们正在查找的内容……您能在建议时演示如何使用反射吗est?看起来像这样=>return Reflect.get(…arguments)
我很困惑为什么非符号属性会被传递到处理程序的get方法,而目标属性在目标上不存在。我将更新OP。你能通过打开typeof proptypeof prop==“symbol”?“symbol[”来演示你的意思吗+prop.toString()+“]”:prop
或您想对符号执行的任何操作。可能只需在代理处理程序中完全忽略它们,然后使用默认的反射进行响应。为它们获取
。是的,我不知道如何处理符号,但我需要在传递符号时传回它们正在查找的内容……您能在建议时演示如何使用反射吗est?看起来像这样=>返回Reflect.get(…arguments)
我很困惑为什么非符号属性会被传递到处理程序的get方法,而目标属性在目标上不存在。我将更新OP。