javascript - 使用 ES6 代理对象从目标对象检索属性时的符号与字符串

标签 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 === '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: Cannot convert a Symbol value to a string

这发生在线路上:

new Error(`The assertion library used does not have '${prop}' property or method.`));

我以前使用过Proxies,从未见过Symbols被传递给Proxy的get方法。有谁知道如何解决这个问题吗?

为什么符号被传递给代理获取函数以及如何正确处理它?<​​/strong>

最佳答案

Why are Symbols being passed to the Proxy get function?

我们不知道,您没有显示任何实际使用代理的代码。但许多符号是通过内置方法访问的,例如当您迭代代理时,它使用 Symbol.iterator 方法。

and how do I properly handle that?

您不能将符号与字符串连接起来,您需要明确地执行此操作。您可以使用 prop.toString() 或仅根据 typeof prop 进行切换。

关于javascript - 使用 ES6 代理对象从目标对象检索属性时的符号与字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46478893/

相关文章:

javascript - WinJS - 如何访问 LED 闪光灯(在 Windows Phone 上)?

年间隔的 Javascript 下拉菜单

javascript - NodeJS : can you pass a variable to 'require' ?

node.js - Momentjs 获取当前位置的时间

javascript - 如何从代理数组中删除或插入项目?

javascript - isteven-multi-select 输出模型不适用于模板

javascript - 当我按下产生效果的按钮时,我怎样才能使下滑效果不让我的网页回到顶部?

javascript - 使用 lodash 仅使用键查找数组中的差异

javascript - 使对象或类属性仅可调用

javascript - 如何在 Javascript 中检查 es6 代理的类型?