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

JavaScript类定义中是否存在声明原型属性的语法?

关于Class语法中原型属性(如@@toStringTag)的实现疑问

我知道原型对象上的数据属性被视为反模式,但存在一些适用场景。其中之一是@@toStringTag属性,它被Object.prototype.toString()用来返回"[object Foo]"而非"[object Object]"。将该属性放在Foo.prototype上似乎是正确的做法。

但该如何正确实现呢?我可以:

  • 创建静态初始化器,在原型上调用Object.defineProperty(或直接赋值)
  • 类声明后直接在原型上调用defineProperty
  • 定义如下 getter:get [Symbol.toStringTag]() { return "Foo"; }(MDN示例用法)

我并不喜欢这三种方案,因为class语法极力隐藏原型对象。前两种方案打破了这一点,第三种虽没有,但会创建不必要的函数。

声明属性[Symbol.toStringTag] = "Foo";是我想要避免的,因为它会在每个Foo实例上创建该属性,而非原型上。

或许我对代码写法过于执着,但在向TC39提交请求前,我是否遗漏了什么?class是否有声明原型属性的语法?


内容的提问来源于stack exchange,提问作者Rolf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:47:11