我正在练习JavaScript代理,想从另一个对象访问一个方法,但代理对象为空:
const data = {
hello: {
log() {
return 'hello log'
},
},
hi: {
log() {
return 'hi log'
},
},
}
const blankObject = {} // I can just pass the data object but I want an empty one
const proxy = new Proxy(blankObject, {
get(target, key) {
const v = target[key]
if (typeof v === 'function') {
// if data.hello.log() or data.hi.log()
return function() {
return data[key]['WHAT_TO_DO']// access data.hello.log or data.hi.log() here?
}
}
return v
}
})
proxy.hello.log() // hello log;
基本上,我试图检查该方法属性是否存在于另一个对象中,我只想告诉代理从另一个对象中获取值,而不将其传递给构造函数。
3条答案
按热度按时间eulz3vhy1#
我不明白你为什么要使用一个与你所代理的对象不同的对象。代理一个空对象没有什么意义。
其次,如果您要访问代理对象的
hello
属性,那么要意识到这个hello
值--在data
对象中找到的--* 不是 * 代理的,因此您不应该在这个Proxy中检查属性是否为函式。此时,log
属性尚未存取。它'仅关于代理知道的hello
访问。但是当
hello
被访问时,你可以通过验证它确实是data
对象的一个属性,将路径转向data
对象。wqnecbli2#
我还在想你到底想做什么。你想把一个方法从一个对象添加到另一个对象?
虽然这感觉有点笨拙。最好是将整个数据对象传递给构造函数,这样空白对象就可以引用它,并且可以在需要时使用它的方法。
owfi6suc3#
没关系,使用测试,没有必要过度设计!