【发布时间】:2016-07-08 06:03:33
【问题描述】:
我正在尝试在函数代理上调用 .toString()。
简单创建一个函数代理,调用toString会导致“TypeError: Function.prototype.toString is not generic”,设置toString返回源原来会导致“RangeError: Maximum call stack size exceeded”,但是创建一个get 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)。括号在这里没有做任何事情。
标签: javascript ecmascript-6 tostring es6-proxy