Я пытаюсь вызвать .toString() на прокси-сервере функции.
Простое создание прокси-сервера функции и вызов toString вызывает «TypeError: Function.prototype.toString не является универсальным», установка toString для возврата источника исходных причин «RangeError: превышен максимальный размер стека вызовов», но создание ловушки получения для toString работает.
Почему простая установка функции toString не работает, а ловушка get работает?
function wrap(source) {
return(new Proxy(source, {}))
}
wrap(function() { }).toString()
function wrap(source) {
let proxy = new Proxy(source, {})
proxy.toString = function() {
return(source.toString())
}
return(proxy)
}
wrap(function() { }).toString()
function wrap(source) {
return(new Proxy(source, {
get(target, key) {
if(key == "toString") {
return(function() {
return(source.toString())
})
} else {
return(Reflect.get(source, key))
} } })) }
wrap(function() { }).toString()
return
— это ключевое слово, а не функция сама по себе, поэтому этоreturn x
, а неreturn(x)
. Парни здесь ничего не делают. - person Albin   schedule 24.02.2018