相关疑难解决方法(0)

函数代理.toString()错误

我试图在函数代理上调用.toString().

简单地创建一个函数代理并调用toString导致"TypeError:Function.prototype.toString不是通用的",将toString设置为返回原始源会导致"RangeError:超出最大调用堆栈大小",但为toString创建一个get陷阱作品.

为什么简单地设置toString函数不起作用,但是设置get陷阱呢?

function wrap(source) {
 return(new Proxy(source, {}))
}
wrap(function() { }).toString()
Run Code Online (Sandbox Code Playgroud)

function wrap(source) {
 let proxy = new Proxy(source, {})
 proxy.toString = function() {
  return(source.toString())
 }
 return(proxy)
}
wrap(function() { }).toString()
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)

javascript tostring ecmascript-6 es6-proxy

7
推荐指数
2
解决办法
1520
查看次数

标签 统计

ecmascript-6 ×1

es6-proxy ×1

javascript ×1

tostring ×1