如何实现,获取对象的属性值不等于设置的属性值。补全下面的代码:
let obj = {}/*在这里写你的代码。*/obj.a = 1obj.a // => obj.a 值是 100
是不是感觉很诡异。可以用 Object.defineProperty 或 Proxy 来实现。
// Object.definePropertyObject.defineProperty(obj, 'a', {get() {return 100}})// Proxyconst handler = {get(obj, prop) {return prop === 'a' ? 100 : undefined}}obj = new Proxy({}, handler)
代理模式介绍
代理模式指:为其它对象提供一个代理对象,并由代理对象控制这个对象的访问。代理模式能起到解藕的作用。解藕对象的核心业务和对象的访问。
代理模式可以控制对对象的访问。我们来看这样的场景,只有超级管理员能获取用户的手机号。用代理模式,实现代码如下:
const user = {name: 'joel',tel: '138...'}const handler = {get(obj, prop) {if(prop === 'tel') {return isAdmin ? obj.tel : '无访问权限'}return obj[prop]}}const outerUser = new Proxy(user, handler)
代理模式的使用场景:
- 权限的控制。如防火墙,白名单。
- 缓存。在某些条件下,对属性或计算结果做缓存。
