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 {
/* 没登录时需要做的操作 */
}
}
}
添加回答
举报
0/150
提交
取消