猿问

js修饰器实现-判断登录的问题

class User {

    constructor() {

        this.name = 'xxx'

    }

    @checkLogin

    getName() {

        console.log('--已登录执行的逻辑')

    }

}


function checkLogin(target, name, descriptor) {

    console.log('...在这里判断登录,如果未登录')

}


let u = new User()

u.getName()

我想使用js修饰器实现判断登录的操作,正常的getName方法中实现已登录的逻辑,想通过checkLogin来检查登录状态


现在的问题是:执行完checkLogin之后,一定会执行getName这个方法,但我的逻辑是,如果校验失败,就不执行后面的方法了,这个怎么实现?


不用装饰之前,这块代码我经常这么写:


function checkLogin() {

    // 一堆判断逻辑,然后return fasle/true

}

function getName() {

    if(checkLogin()) {

        // 已登录的逻辑

    }else {

        // 未登录,可能跳登录页,或打开登录框等等。。。

        // 而且,这段if/else每个调用方法都需要写一份

    }

}

如果用装饰器的话,getName这个方法只实现自己的逻辑,和是否登录根本就没有关系,更专注,更加解耦


ITMISS
浏览 312回答 1
1回答

慕码人8056858

function checkLogin(target, name, descriptor) {  const oldFunc = descriptor.value;  descriptor.value = function () {    if (/* 判断是否登录的条件 */) {      return oldFunc.apply(this, arguments);    } else {      /* 没登录时需要做的操作 */    }  }}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答