好奇我们如何在运行时调用属性修饰器。例如,如果我们运行以下代码:
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);
这是怎么做到的?
答案 0 :(得分:0)
评论是正确的。无法在运行时调用属性装饰器。它们只是设计时间的结构。因此,示例问题中的日志记录语句仅在类加载期间运行,然后再也不会执行任何操作。它可以通过“load”事件为类实例提供额外的机制,可以用于我正在查看的目的,在这种情况下验证实例。
所以我要做的就是改变类的原型并提供一个额外的函数,可以调用它来验证已注释的类的实例。
如果有人在同一个"思考轨道"我的下一个问题是how to pass additional arguments to the decorator。