为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

ITMISS 2018-12-26 18:15:57
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这个方法只实现自己的逻辑,和是否登录根本就没有关系,更专注,更加解耦
查看完整描述

1 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

function checkLogin(target, name, descriptor) {

  const oldFunc = descriptor.value;

  descriptor.value = function () {

    if (/* 判断是否登录的条件 */) {

      return oldFunc.apply(this, arguments);

    } else {

      /* 没登录时需要做的操作 */

    }

  }

}


查看完整回答
反对 回复 2019-01-29
  • 1 回答
  • 0 关注
  • 311 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信