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 prop
typeof prop=='symbol''来演示你的意思吗?“+prop.toString()+””:prop
或您想对符号执行的任何操作。可能只需在代理处理程序中完全忽略它们,然后使用默认的
反射进行响应。为它们获取
。是的,我不知道如何处理符号,但我需要在传递符号时传回它们正在查找的内容……您能在建议时演示如何使用反射吗est?看起来像这样=>
return Reflect.get(…arguments)
我很困惑为什么非符号属性会被传递到处理程序的get方法,而目标属性在目标上不存在。我将更新OP。你能通过打开typeof prop
typeof prop==“symbol”?“symbol[”来演示你的意思吗+prop.toString()+“]”:prop
或您想对符号执行的任何操作。可能只需在代理处理程序中完全忽略它们,然后使用默认的
反射进行响应。为它们获取
。是的,我不知道如何处理符号,但我需要在传递符号时传回它们正在查找的内容……您能在建议时演示如何使用反射吗est?看起来像这样=>
返回Reflect.get(…arguments)
我很困惑为什么非符号属性会被传递到处理程序的get方法,而目标属性在目标上不存在。我将更新OP。