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

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