В вашем случае, опечатка будет obj[receiver]
, которая должна быть obj[prop]
.receiver
- это объект (обычно сам прокси-сервер), поэтому, выполнив obj[receiver]
, вы конвертируете receiver
в строку, что требует вызовов get
, что затем вызывает бесконечную рекурсию, которую вы видите.Это решит вашу проблему, но, как вы, возможно, сейчас задаетесь вопросом, что тогда означает receiver
В этом случае receiver
имеет решающее значение для правильной работы вашего прокси.Самый простой способ справиться с этим, если вы пишете прокси-сервер, вы должны использовать методы из Reflect
, чтобы обеспечить правильное сохранение поведения.
var handler = {
set: function(obj, prop, value, receiver) {
console.log(prop);
return Reflect.set(obj, prop, value, receiver);
}
get: function(obj, prop, receiver) {
if (typeof prop !== 'symbol') console.log(prop);
return Reflect.get(obj, prop, receiver);
}
};
Методы Reflect
выполняют точное исходное поведение, которое выполнял бы прокси , поэтому, используя их, вы избегаете опасностей, связанных с неправильной их реализацией самостоятельно.