正文
) {
return
'学习'
;
}
return
target[prop];
}
});
这个时候如果调用
console.log(me.like)
依然是
小红
,因为真心不会说谎。但当我们调用
console.log(meWithProxy.like)
的时候,就会可耻的输出
学习
,告诉大家说我们喜欢的是
学习
。
小试牛刀:不要停止我的音乐
刚才我们简单了解了代理能够拦截对象属性的获取,可以隐藏真实的属性值而返回代理想要返回的结果,那么对于对象属性的赋值呢?让我们一起来看看。
假设你正在听音乐:
const me = { name: '小明', musicPlaying: true }
此时如果我们执行
me.musicPlaying = false
这样就轻而易举地停止了你的音乐,那么如果我们挂上代理人:
const meWithProxy = new Proxy(me, {
set(target, prop, value) {
if (prop === 'musicPlaying' && value !== true) {
throw Error('任何妄图停止音乐的行为都是耍流氓!');
}
target[prop] = value;
}
});
这时候如果我们执行
me.musicPlaying = false
,就会被毫不留情地掀了桌子:
> meWithProxy.musicPlaying = false
Error: 任何妄图停止音乐的行为都是耍流氓!
at Object.set (repl:4:13)
>
释放魔法:封装全宇宙所有 RESTful API
现在我们已经知道通过 Proxy 可以拦截属性的读写操作,那然后呢?没什么用?