javascript - 如何在运行时调用属性装饰器?
问题描述
好奇我们如何在运行时调用属性装饰器。例如,如果我们运行以下代码:
function PropertyDecorator(
target: Object, // The prototype of the class
propertyKey: string | symbol // The name of the property
) {
console.log("PropertyDecorator called on: ", target, propertyKey);
}
class PDE {
@PropertyDecorator
name: string;
}
它将记录PropertyDecorator called on: PDE {} name
,因此在加载类时调用装饰器。假设我们想在这样的实例上再次调用它PDE
:
const newPDE = PDE();
callDecoratorsOnProperties(newPDE);
这是怎么做的?
解决方案
评论是正确的。属性装饰器不能在运行时调用。它们只是设计时的结构。因此,示例问题中的日志记录语句仅在类加载期间运行,然后再也不会做任何事情。由“加载”事件为类实例提供额外的机制,这些机制可用于我正在查看的目的,在本例中是验证实例。
所以我要做的是改变类的原型,并提供一个额外的函数,可以调用它来验证已被注释的类的实例。
如果有人跟随同一个“思想轨迹”,我的下一个问题是如何将额外的参数传递给 decorator。
推荐阅读
- c++ - 有没有办法从cpp中的文本生成条形码图像?
- node.js - Lambda 正在发送先前的事件而不是“实时”
- python - 二叉树的总和没有按预期的递归运行
- mysql - MySQL,从同一个表中选择 2+ 个匹配项
- angular - 是否可以将组件的内容(ng-content)作为字符串获取?
- cypress - 如何检查元素宽度是否小于或等于赛普拉斯中的像素大小?
- c++ - 我可以使用 malloc 为类对象分配内存吗?
- jenkins - Jenkins插件gitChangelog:如何指定存储库路径
- sql - SQL:为每个 id 增加列值(循环?)
- python - 如何使用线程防止程序“冻结”