1

我目前经常使用代理,但有一个陷阱,我不知道如何解决而不感到 hackish。

看这个简单的代码:

var target = {bla: 4}
var handler = {
  get: function (target, name, receiver) {
    console.log(target, name)
  }
}

var p = new Proxy(target, handler)
console.log('Finished', p)

这输出:

{ bla: 4 } Symbol(util.inspect.custom)
{ bla: 4 } 'inspect'
{ bla: 4 } 'inspect'
{ bla: 4 } Symbol(Symbol.toStringTag)
{ bla: 4 } Symbol(Symbol.iterator)
Finished: { bla: 4 }

在我的真实代码中,我可以毫无问题地整理符号,Symbol(util.inspect.custom)因为我可以将它们中继到Reflect.get. 但是,getTrap 也使用 调用'inspect'。两次!target.inspect那是一个字符串——这个“特殊”调用和对属性的正常访问没有区别。

我该如何解决这种歧义?为什么无论如何都要用非符号名称调用陷阱?

4

0 回答 0