我想在函數代理上調用.toString()。函數代理.toString()錯誤
只需創建一個函數代理和調用toString導致「類型錯誤:Function.prototype.toString是不通用的」,設置了toString返回原來的原因「的RangeError:最大調用堆棧大小超出」的來源,但創建爲toString工作獲得陷阱。
爲什麼簡單地設置toString函數不起作用,但是做出陷阱呢?
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()
相關:https://開頭esdiscuss。 org/topic/calling-tostring-on-function-proxy-throws-typeerror-exception – tybro0103
不相關:'return'是一個關鍵字,本身不是函數,所以它是'return x'而不是'return(x)'。 parens在這裏沒有做任何事情。 – Albin