能否使用JS字段装饰器修改静态类字段的值?
是否可以通过JS字段装饰器修改字段的值?
一个简化的用例如下:
const addItem = (newValue) => { return function (target) { target.value.push(newValue); }; }; class Test { @addItem(4) static values = [1,2,3]; } const test = new Test(); console.log(test.constructor.values) // [1,2,3,4]
使用以下实验性装饰器配置:
'@babel/plugin-proposal-decorators', { version: '2018-09', decoratorsBeforeExport: true, },
最终目标是制作一个装饰器,将tailwind样式表注入到lit元素的static styles中。目前使用mixin实现该功能,仅出于兴趣与学习装饰器可能性的目的尝试此方案。
针对Barmars评论的更新
尝试从内部函数返回值时,出现如下错误:
export const addItem = (value) => { return function (target) { return [value]; }; }; Uncaught TypeError: An element descriptor's .kind property must be either "method" or "field", but a decorator created an element descriptor with .kind "undefined"
查看文档后发现,传递给这些函数的参数也与文档不符。
function logged(value, { kind, name }) { if (kind === "field") { return function (initialValue) { console.log(`initializing ${name} with value ${initialValue}`); return initialValue; }; } }
运行该示例时,logged()的第二个参数为undefined。initialValue同样是一个对象而非具体值:
Object { kind: "field", key: "styles", placement: "own", descriptor: {…}, initializer: value(), … }
内容的提问来源于stack exchange,提问作者Joe Jankowiak
相关产品推荐
相关产品推荐

