ES6中新增的Reflect怎么用?

Reflect是ES6提供的新對象,它的作用有二:

  1. 將Object對象的一些明顯屬于語言內(nèi)部的方法(比如Object.defineProperty,Proxy對象上所有新增函等),放到Reflect對象上。

  2. 讓Object操作都變成函數(shù)行為,將對象的操作符操作封裝為函數(shù)以讓用戶明顯感知操作的成敗。修改某些Object方法的返回結(jié)果,讓其變得更合理。
    如:

let obj = {
  name:'zhangsan'
}
obj.name = 'lisi';
console.log(obj)//{name:'lisi'}

這是一個普通的不能再普通的對象屬性賦值操作,設(shè)置成功后obj對象的name屬性值變?yōu)?lisi'。然而某些情況下操作失敗時,要么是不友好的報錯,要么用戶并無感知,導(dǎo)致找不到bug出處。
如程序員甲給obj的name屬性設(shè)置了不可寫:

let obj = {
  name:'zhangsan'
}
Object.defineProperty(obj,'name',{
    writable:false
})
obj.name = 'lisi';
console.log(obj)//{name:'張三'}

程序員乙通過obj.name = 'lisi'設(shè)置了name屬性的值,然而name屬性的值未改變,莫名其妙。如果通過Reflect提供的api代替.操作符進(jìn)行的屬性訪問和設(shè)置操作,就可明顯感知操作的成敗,然后再編寫后續(xù)的邏輯。

let obj = {
  name:'zhangsan'
}
Object.defineProperty(obj,'name',{
    writable:false
})
obj.name = 'lisi';
var  result = Reflect.set(obj,'name','lisi');
if(result ){
  console.log(obj)//當(dāng)屬性可寫的情況下成功更改屬性的值
}else{
  console.log('name屬性值修改失敗,請檢查是否設(shè)置了不可寫,或其他原因')
}

根據(jù)以上理論,可將Proxy代理改寫的更合理:

let objs = {
  name:'zhangsan',
  password:'123456'
}
Object.defineProperty(objs,'name',{
    writable:false
});
let proxy=new Proxy(objs,{
  set(target,key,value){
    let isSuccess=Reflect.set(target,key,value);
    if(!isSuccess){
      throw new Error('值設(shè)置失敗');
    }
    return isSuccess
  }
})
proxy.name = 18;
console.log(objs);
//Uncaught Error: 值設(shè)置失敗

這樣用戶就可以明顯感知靜默操作的成敗。
剩下的Reflect對象上的函數(shù)和Proxy對象上的函數(shù)名字,參數(shù)一致,感興趣的可查看
ES6中Proxy的詳細(xì)用法
Reflect實(shí)用小栗子
ES6總篇--目錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Proxy Proxy可以理解成,在目標(biāo)對象之前架一層‘?dāng)r截’,外界對該對象的訪問,都必須先通過這層攔截,因此提供...
    nomooo閱讀 1,100評論 0 4
  • 本文為阮一峰大神的《ECMAScript 6 入門》的個人版提純! babel babel負(fù)責(zé)將JS高級語法轉(zhuǎn)義,...
    Devildi已被占用閱讀 2,122評論 0 4
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,621評論 1 32
  • 文/芭茅稈(胡志軍) 模因(meme)像一個魔鬼一樣,在無意識中涌動! 1 人跟其他的生物相比,有很大的相似性。從...
    瑪雅之釋閱讀 596評論 0 2
  • 很多人在求職的時候,會遇到一個這樣的問題:“OOD/OOP是什么”,這個時候有人就會問OOD、OOP是什么呢?那么...
    心無城府半點(diǎn)深丶閱讀 2,810評論 0 1

友情鏈接更多精彩內(nèi)容