You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:15:34