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