0

使用以下代码:

 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 方法。有谁知道如何规避这个问题?

为什么将符号传递给代理获取函数,我该如何正确处理?

4

1 回答 1

2

为什么将符号传递给代理获取函数?

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

我该如何正确处理呢?

您不能将符号与字符串连接,您需要明确说明这样做。您可以使用其中一个prop.toString()或仅基于typeof prop.

于 2017-09-28T22:31:28.890 回答