我正在尝试在函数代理上调用 .toString() 。
简单地创建一个函数代理并调用 toString 会导致“TypeError:Function.prototype.toString is not generic”,设置 toString 以返回原始导致“RangeError:超出最大调用堆栈大小”的源,但是为 toString 创建了一个 get 陷阱作品。
为什么简单地设置 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()