class User { constructor() { this.name = 'xxx' } @checkLogin getName() { console.log('--已登錄執(zhí)行的邏輯') }}function checkLogin(target, name, descriptor) { console.log('...在這里判斷登錄,如果未登錄')}let u = new User()u.getName()我想使用js修飾器實(shí)現(xiàn)判斷登錄的操作,正常的getName方法中實(shí)現(xiàn)已登錄的邏輯,想通過(guò)checkLogin來(lái)檢查登錄狀態(tài)現(xiàn)在的問(wèn)題是:執(zhí)行完checkLogin之后,一定會(huì)執(zhí)行g(shù)etName這個(gè)方法,但我的邏輯是,如果校驗(yàn)失敗,就不執(zhí)行后面的方法了,這個(gè)怎么實(shí)現(xiàn)?不用裝飾之前,這塊代碼我經(jīng)常這么寫:function checkLogin() { // 一堆判斷邏輯,然后return fasle/true}function getName() { if(checkLogin()) { // 已登錄的邏輯 }else { // 未登錄,可能跳登錄頁(yè),或打開(kāi)登錄框等等。。。 // 而且,這段if/else每個(gè)調(diào)用方法都需要寫一份 }}如果用裝飾器的話,getName這個(gè)方法只實(shí)現(xiàn)自己的邏輯,和是否登錄根本就沒(méi)有關(guān)系,更專注,更加解耦
js修飾器實(shí)現(xiàn)-判斷登錄的問(wèn)題
ITMISS
2018-12-26 18:15:57