es6 Reflet 个人理解

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章