如何在运行时调用属性修饰器?

时间:2018-06-07 14:25:01

标签: javascript typescript annotations decorator

好奇我们如何在运行时调用属性修饰器。例如,如果我们运行以下代码:

    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);

这是怎么做到的?

1 个答案:

答案 0 :(得分:0)

评论是正确的。无法在运行时调用属性装饰器。它们只是设计时间的结构。因此,示例问题中的日志记录语句仅在类加载期间运行,然后再也不会执行任何操作。它可以通过“load”事件为类实例提供额外的机制,可以用于我正在查看的目的,在这种情况下验证实例。

所以我要做的就是改变类的原型并提供一个额外的函数,可以调用它来验证已注释的类的实例。

如果有人在同一个"思考轨道"我的下一个问题是how to pass additional arguments to the decorator