美文网首页
类里方法的装饰器

类里方法的装饰器

作者: 泡杯感冒灵 | 来源:发表于2022-04-19 18:14 被阅读0次
类的方法的装饰器
  • 方法的装饰器的执行时间也是在类定义之后,立即对类的方法进行装饰修改
  • 方法的装饰器接受3个参数 target、key、descriptor
  • 普通方法 target 对应的是类的prototype, key对应的是装饰的方法的名字
  • 静态方法(static) target 对应的是类的构造函数, key对应的是装饰的方法的名字
function getNameDecorator(target: any, key: string,descriptor: PropertyDescriptor) {
  // console.log(target,key);
};

class Test{
  name: string;
  constructor(name: string) {
    this.name = name;
  }
  @getNameDecorator
  getName() {
    return this.name;
  }
  // static getName() {
  //   return '123';
  // }
}

// const test = new Test('yang');
// console.log(test.getName());
descriptor参数就是对方法的 PropertyDescriptor属性(value,enumerable,configurable,writable )做一些编辑
class Test{
  name: string;
  constructor(name: string) {
    this.name = name;
  }
  @getNameDecorator
  getName() {
    return this.name;
  }
}

// 默认情况下 descriptor的writable为true,也就是可以被修改。false时是只读的
const test = new Test('yang');
test.getName = () => {
  return '123';
}

console.log(test.getName());  // 123
  • 当我们修改descriptor的writable为false的时候,就不能去改写getName 方法了,否则会报错
  • 当然了,就算是descriptor的writable为false的时候,我们也可以通过对descriptor的value进行变更。从而达到对原来的方法的变更。因为value就是属性的值,而此时value的值就是getName方法。
function getNameDecorator(target: any, key: string,descriptor:PropertyDescriptor) {
  // console.log(target,key);
  descriptor.writable = false;
  descriptor.value = function () {
    return 'decorator'
  }
};

class Test{
  name: string;
  constructor(name: string) {
    this.name = name;
  }
  @getNameDecorator
  getName() {
    return this.name;
  }
}

const test = new Test('yang');
console.log(test.getName());  // decorator

相关文章

  • 类里方法的装饰器

    类的方法的装饰器 方法的装饰器的执行时间也是在类定义之后,立即对类的方法进行装饰修改 方法的装饰器接受3个参数 ...

  • Python装饰器类的使用——bound/unbound met

    引言 在学习装饰器类方法时发现,如果装饰器类只有__ call __方法则只能装饰普通的函数(function),...

  • TS装饰器初体验,用装饰器管理koa接口

    typescript中的装饰器有很多种,比如类装饰器、方法装饰器、属性装饰器等等,先看看装饰器的定义吧,下面以类装...

  • typescript 五种装饰器

    装饰器类型 装饰器的类型有:类装饰器、访问器装饰器、属性装饰器、方法装饰器、参数装饰器,但是没有函数装饰器(fun...

  • ES6 系列之我们来聊聊装饰器

    Decorator 装饰器主要用于: 装饰类 装饰方法或属性 装饰类 装饰方法或属性 Babel 安装编译 我们可...

  • 装饰器

    装饰器 装饰器可以非侵入地完成对方法、类的封装。装饰器的返回值也是一个方法、类对象。装饰器常用来完成以下工作 插入...

  • TypeScript装饰器

    前言 装饰器分类 类装饰器 属性装饰器 方法装饰器 参数装饰器需要在tsconfig.json中启用experim...

  • 装饰器(Decorator)

    装饰器(Decorator) 装饰器是一种函数,写成@ + 函数名。它可以放在类和类方法的定义前面。 类上的装饰 ...

  • TS装饰器

    一:类的装饰器:是一种与类(class)相关的语法,用来注释或修改类和类方法,装饰器本身是一个函数,装饰器通过@来...

  • Python类装饰器@classmethod, @staticm

    (2022.02.15 Tues)Python类自带了三个装饰器。被@classmethod装饰的方法是类方法,被...

网友评论

      本文标题:类里方法的装饰器

      本文链接:https://www.haomeiwen.com/subject/ixofertx.html