这两个功能都出现在ES6中,两者配合得非常好!
Proxy
proxy 是一个外来的对象,他没有属性! 它封装了一个对象的行为。它需要两个参数。
const toto = new Proxy(target, handler)
target: 是指将被代理/包裹的对象
handler: 是代理的配置,它将拦截对目标的操作(获取、设置等)
多亏了 proxy ,我们可以创建这样的 traps
:
const toto = { a: 55, b:66 }
const handler = {
get(target, prop, receiver) {
if (!!target[prop]) {
return target[prop]
}
return `This ${prop} prop don't exist on this object !`
}
}
const totoProxy = new Proxy (toto, handler)
totoProxy.a // 55
totoProxy.c // This c prop don't exist on this object !
每个内部对象的 "方法" 都有他自己的目标函数
下面是一个对象方法的列表,相当于进入了 Target:
object method | target |
---|---|
object[prop] | get |
object[prop] |