1.反射API与对象API
- 反射API并不限于捕获处理程序。
- 大多数反射API方法在Object类型上有对应的方法。
- 通常Object方法适用于处理通用函数,而反射方法适用于细粒度的对象控制与操作。
2.反射状态的状态标记
const o = {};
if(Reflect.defineProperty(o,'foo',{value:'bar'})){
console.log('success');
}else{
console.log('failure');
}
- 上述例子如果定义新属性时发生问题,Reflect.defineProperty()会返回false。
- 常用提供状态标记的反射方法:
(1)Reflect.defineProperty()
(2)Reflect.preventExtensions()
(3)Reflect.setPrototypeOf()
(4)Reflect.set()
(5)Reflect.deleteProperty()
3.用一等函数替代操作符
- Reflect.get():可以替代对象属性访问操作符。
- Reflect.set():可以替代=赋值操作符。
- Reflect.has():可以替代in操作符或者with。
- Reflect.deleteProperty():可以替代delete操作符。
- Reflect.construct():可以替代new操作符。
4.安全地应用函数
- 通过apply方法调用函数时,被调用的函数可能也定义了自己的apply属性。为了绕过这个问题,可以使用Function原型上的apply方法。比如
Function.prototype.apply.call(myFunc,thisVal,argumentList);
- 通过反射方法Reflect.apply()可以避免这种可怕的代码。
Reflect.apply(myFunc,thisVal,argumentList)