2016-03-26 39 views
0

我想攔截get和set操作使用代理。設置完美,但在無限循環中獲取觸發器「RangeError:超出最大調用堆棧大小」。我正在嘗試在截取期間簡單地登錄並返回默認行爲。代理獲取RangeError

工作:

testobject = {} 
 
testobject = new Proxy(testobject, { 
 
set(target, property, value, receiver) { 
 
    console.log("setting", target, property, value, receiver) 
 
    return(Reflect.set(target, property, value, receiver)) 
 
} 
 
}) 
 
testobject.done = true 
 
console.log(testobject.done)

斷裂:

testobject = {} 
 
testobject = new Proxy(testobject, { 
 
get(target, property, receiver) { 
 
    console.log("getting", target, property, receiver) 
 
    return(Reflect.get(target, property, receiver)) 
 
}, 
 
set(target, property, value, receiver) { 
 
    console.log("setting", target, property, value, receiver) 
 
    return(Reflect.set(target, property, value, receiver)) 
 
} 
 
}) 
 
testobject.done = true 
 
console.log(testobject.done)

回答

0

我通過去除接收機paramters固定這一點。

testobject = {} 
 
testobject = new Proxy(testobject, { 
 
get(target, property) { 
 
    console.log("getting", target, property) 
 
    return(Reflect.get(target, property)) 
 
}, 
 
set(target, property, value) { 
 
    console.log("setting", target, property, value) 
 
    return(Reflect.set(target, property, value)) 
 
} 
 
}) 
 
testobject.done = true 
 
console.log(testobject.done)