常见的装饰器用法

05d97fa55b85163ff1ba5e050c8101ab.png

在JavaScript中,装饰器是一种特殊的函数,其主要用途是可以修改或增强现有的类或对象的行为。装饰器一般用于修改类或对象的属性、方法、访问器、参数等。

以下是一些常见的装饰器用法:

1、类装饰器:类装饰器是用于修改类的行为的装饰器。通过 @ 符号和装饰器函数,可以修改类的构造函数以及类的原型属性和方法。

例如:

function decorator(target) {
  target.newProperty = 'new property';
}


@decorator
class MyClass {
  // ...
}

在上面的代码中,decorator 函数是 MyClass 的装饰器,它添加了一个新的属性 newProperty 到 MyClass 中。

2、方法装饰器:方法装饰器用于修改类的方法。方法装饰器接收三个参数:类的原型对象、方法名和方法的描述对象。通过修改方法的描述对象,可以改变方法的行为。

例如:

function log(target, name, descriptor) {
  const originalMethod = descriptor.value;
  descriptor.value = function(...args) {
    console.log(`Method ${name} called with args ${args}`);
    return originalMethod.apply(this, args);
  };


  return descriptor;
}


class MyClass {
  @log
  method(arg1, arg2) {
    // ...
  }
}

在上面的代码中,log 函数是 MyClass 类的方法装饰器。当 method 被调用时,log 装饰器会在控制台中打印方法名和参数,然后再执行原始方法。

3、属性装饰器:属性装饰器用于修改类的属性。与方法装饰器类似,属性装饰器接收三个参数:类的原型对象、属性名和属性描述对象。通过修改属性的描述对象,可以改变属性的行为。

例如:

function uppercase(target, name) {
  let value = target[name];
  const getter = function() {
    return value;
  };
  const setter = function(newVal) {
    value = newVal.toUpperCase();
  };


  Object.defineProperty(target, name, {
    get: getter,
    set: setter,
    enumerable: true,
    configurable: true
  });
}


class MyClass {
  @uppercase
  name = 'John Doe';
}

在上面的代码中,uppercase 函数是 MyClass 类的属性装饰器。它将 MyClass 类中的 name 属性修改为大写字母形式。

以上是三种常见的装饰器用法。装饰器的应用场景很广泛,可以用于AOP编程和元编程等各种场景。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值