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

【九月打卡】第12天 TypeScript学习 10-14~10-15章

标签:
征文 活动

课程名称: 晋级TypeScript高手,成为抢手的前端开发人才

课程章节: 10-14 方法拦截器意义 ~ 10-15 【方法装饰器】方法前置拦截和后置拦截

课程讲师: keviny79

课程内容:
方法拦截器的意义:

方法拦截器本质就是一个“函数”,也可以理解为“方法”。
它把 “目标类的方法” 包裹在自己体内,然后再执行这个 “目标类的方法” 之前 帮 “目标类的方法” 做一些前置工作 和 执行完 “目标类的方法” 做一些后置工作, 这就是 “前置拦截”和“后置拦截”。
方法拦截器从本质上来讲,就是扩大了“目标类上的方法”的特定的函数
使用场景如:增加一个日志信息,修改方法参数进行功能扩展处理。

拦截器的实现:

// 增强目标类的方法功能
// 字符串相关工具类
class StringUtil {
  // 去除字符串中空格
  public static trimSpace(str: string): string {
    return str.replace(/\s+/g, "");
  }
}


// 方法装饰器
function MyMethodDecorator(methodPath: string) {
  return function (
    targetClassPrototype: any,
    methodname: string,
    dataprops: PropertyDescriptor
  ) {
	// 保存一份 目标类上的方法
	// dataprops.value 得到的是 装饰器上的方法
    let datamethodprops = dataprops.value;

    // 方法拦截器
    // 创建一个函数并把这个保存给 目标类上的方法
    dataprops.value = function (...args: any) {
      args = args.map((arg: any) => {
        if (typeof arg === "string") {
          return StringUtil.trimSpace(arg);
        }
        return arg;
      });
      console.log("args:", args);
      
      // 前置拦截
      // 在调用目标类上的方法之前,为前置拦截
      // 调用之前保存的 目标类上的方法,并传递参数
      datamethodprops.call(this, args);
      
      // 在调用了 目标类上的方法 后,为后置拦截
      console.log("后置拦截。。。");
    };
  };
}

class RoleService {
  public roleName: string = "管理员";
  constructor() {}
  
  // 使用方法装饰器
  @MyMethodDecorator("/searchFood")
  DistribRoles(userName: string, isValid: boolean) {
    console.log("分配角色.....");
  }
}

let roleService = new RoleService();
// 需要调用方法,在执行方法装饰器
roleService.DistribRoles("战三", true);

课程收获:
明白了方法拦截器的意义、使用方法、使用场景

图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Web前端工程师
手记
粉丝
10
获赞与收藏
5

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消