В настоящее время я часто использую прокси, но у меня была ловушка, которую я не знаю, как решить, не чувствуя себя хакером.
См. Этот простой код:
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
.
Как мне решить эту двусмысленность? В любом случае, почему ловушка вызывается с несимвольным именем?