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

【九月打卡】第11天 TypeScript学习 10-13章

标签:
征文 活动

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

课程章节: 10-13 【方法装饰器】方法装饰器的实现

课程讲师: keviny79

课程内容:
方法装饰器使用:
1.不带参数的"方法装饰器"写法

// 声明没有参数的方法装饰器
function MyMethodDecorator(
  targetClassPrototype: any,
  key: string,
  methodDecri: PropertyDescriptor
) {
  console.log("targetClassPrototype:", targetClassPrototype); //
  console.log("key:", key);
  console.log("methodDecri:", methodDecri);
  methodDecri.value();
}

class RoleService {
  public roleName: string = "管理员";
  constructor() {}
  
  // 直接在方法上使用 @ + 参数器名称
  @MyMethodDecorator
  DistribRoles() {
    // 分配角色
    console.log("分配角色.....");
  }
}

2.带参数的"方法装饰器"写法:

// 声明带参数的方法装饰器
function MyMethodDecorator(methodPath: string) {
  return function (
    targetClassPrototype: any,
    key: string,
    methodDecri: PropertyDescriptor
  ) {
    // 使用外界传递参数
    console.log("methodPath:", methodPath);

    console.log("targetClassPrototype:", targetClassPrototype); //
    console.log("key:", key);
    console.log("methodDecri:", methodDecri);
    methodDecri.value();
  };
}

class RoleService {
  public roleName: string = "管理员";
  constructor() {}

  // 直接在方法上使用 @ + 参数器名称 + ([...参数])
  @MyMethodDecorator("/searchFood")
  DistribRoles() {
    // 分配角色
    console.log("分配角色.....");
  }
}

知道了 “方法装饰器”的写法,发现“类装饰器”可以接收一个参数,“方法装饰器”要接收三个参数,分别是:
targetClassPrototype 参数
这里表示是类的原型对象

key 参数
这里的 key 就是方法名称

methodDecri 参数
methodDecri “数据属性”由 js自带的, 就是控制函数的属性的。有如下这些属性:

 {
    configurable?: boolean;		// 是否能参数
    enumerable?: boolean;		// 是否能使用for in 来循环返回对象的属性
    value?: any;		// 属性的值
    writable?: boolean;	//是否是可写属性
    get?(): any;		//在读取属性时调用的函数,
    set?(v: any): void;		//在写入属性时调用的函数
}

课程收获:
明白“方法装饰器”带参数和不带参数的使用。
明白“方法装饰器”中三个参数的意义
图片描述

点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消