1.4 装饰器的简单示例

/**
 *类装饰器
 */
function log(name: string) {
  return function(target: any) {
    target.prototype.name = name;
  };
}

/**
 * 方法装饰器
 */
function logM(n: number) {
  return function(target: any, key: string, d: PropertyDescriptor) {
    d.value = function() {
      console.log(n);
    };
  };
}

/**
 * 属性装饰器
 */
function logP(arms: string) {
  return function(target: any, key: string) {
    target[key] = arms;
  };
}

/**
 * 访问器装饰器
 */
function logG() {
  return function(target: any, key: string, d: PropertyDescriptor) {
    d.get = function() {
      console.log("get");
    };

  };
}

/**
 * 参数装饰器
 */
function logA(target: object, key: any, n: number) {
  console.log(key, n);
}

@log("A")
class A {
  @logP("hello")
  info: string;

  constructor() {
  }

  @logM(102)
  e() {
    console.log("run");
  }

  f() {
    console.log(this.info);
  }

  @logG()
  get test() {
    return this.info;
  }

  reset(@logA info: number) {

  }
}

let q: any = new A();
console.log(q.name);
console.log(q.info);
q.test;
q.e();
q.reset(1);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值