现阶段,某些方法同时在
Object
和Reflect
对象上部署,未来的新方法将只部署在Reflect
对象上。也就是说,从Reflect
对象上可以拿到语言内部的方法。
Reflect 对象
(1)可以拿到语言内部的方法。
(2)修改某些Object 方法的返回结果,可以让其变得更合理
(3)让 Object 操作变成函数行为
(4)Reflect 对象的方法与Proxy 对象的方法一一对应。即只要是 Proxy 对象的方法就能在Reflect 对象上找到对应的方法。
方便 Proxy 对象可以方便的调用对应的Reflect 方法,完成默认行为。
- Reflect 静态方法
- Reflect.get(target, name, receiver)
- Reflect.set(target, name, value, receiver)
- Reflect.has(obj, name)
- Reflect.deleteProperty(obj, name)
- Reflect.construct(target, args)
- Reflect.getPrototypeOf(obj)
- Reflect.setPrototypeOf(obj, newProto)
- Reflect.apply(func, thisArg, args)
- Reflect.defineProperty(target, propertyKey, attributes)
- Reflect.getOwnPropertyDescriptor(target, propertyKey)
- Reflect.isExtensible (target)
- Reflect.preventExtensions(target)
- Reflect.ownKeys (target)
上面这些方法的作用,大部分与Object
对象的同名方法的作用都是相同的,而且它与Proxy
对象的方法是一一对应的。下面是对它们的解释
-
使用Proxy 实现观察者模式
观察者模式(Observer mode)指的是函数自动观察数据对象,一旦对象有变化,函数就会自动执行。
使用Proxy 观察者模式的最简单实现(即实现 observable 和 observe)
思路:observable 函数返回一个原始对象 Proxy 代理,拦截赋值操作,触发充当观察者的各个函数。