Reflet
设计目的:
-
未来代替object
-
修改某些
Object
方法的返回结果,让其变得更合理
// 老写法
try {
Object.defineProperty(target, property, attributes);
// success
} catch (e) {
// failure
}
// 新写法
if (Reflect.defineProperty(target, property, attributes)) {
// success
} else {
// failure
}
- 统一行为,函数操作,而不是一部分函数操作,一部分命令式,比如
delete obj[a]
,name in obj
// 老写法
'assign' in Object // true
// 新写法
Reflect.has(Object, 'assign') // true
- 和proxy配合统一对象行为
Proxy(target, {
set: function(target, name, value, receiver) {
var success = Reflect.set(target, name, value, receiver);
if (success) {
console.log('property ' + name + ' on ' + target + ' set to ' + value);
}
return success;
}
});
- 简便操作,增加可读性
// 老写法
Function.prototype.apply.call(Math.floor, undefined, [1.75]) // 1
// 新写法
Reflect.apply(Math.floor, undefined, [1.75]) // 1
Reflect
对象一共有 13 个静态方法,同proxy