gpt4 book ai didi

javascript - 在Javascript中,是否可以在运行时访问字段的注释数据?

转载 作者:行者123 更新时间:2023-12-02 23:18:42 26 4
gpt4 key购买 nike

给出示例 JavaScript 代码:

function foo = key => target => {
target.key = key;

return target;
}

class Bob {

@foo('hello')
a = 'world';

}

const bob = new Bob();

有没有办法在运行时从带注释的字段访问key的值?像这样的东西:

getAnnotationTarget(bob, 'a').key;  // "hello"

这个问题的要点是允许类字段注释,并从注释中检索与该字段关联的数据。字段的值本身不应受到影响,即 bob.a = "blah"; 不应影响与该字段关联的注释值。

我天真的想法是从注解中扩展字段的原型(prototype),但是当注解执行时似乎不可用。

谢谢。

最佳答案

您可以向类添加一个(隐藏的) map ,然后查找它:

 const hidden = Symbol();

decorator @foo(value) {
@register((target, prop) => {
if(!target[hidden]) target[hidden] = new Map();
target[hidden].set(prop, value);
}
}

const getAnnotationTarget = (instance, key) =>
instance.constructor[hidden].get(key);

或者使用 babelproposal 语法,装饰器看起来像这样:

 const foo = (value) => (target, prop) => {
target = target.constructor;
if(!target[hidden]) target[hidden] = new Map();
target[hidden].set(prop, value);

};

关于javascript - 在Javascript中,是否可以在运行时访问字段的注释数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57047026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com