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

JavaScript中,类内除变量声明式定义属性外,还有其他声明方式吗?

JavaScript类的合法属性声明方式

你给出的代码能正常打印tom,因为使用了类字段声明语法:

class User{
    name="tom"
    showName(){
        console.log(this.name)
    }
}
const tom = new User()
console.log(tom.name)

但在类块中直接用var/let/const声明变量,或者直接写this.name="Tom"都会报错——类块的作用域规则和普通代码块不同,这些写法不符合类的语法规范。

除了类字段声明,JavaScript类中还有以下几种合法的属性声明方式:

  • 在构造函数中通过this赋值
    这是最经典的实例属性定义方式,在类的constructor方法内为实例绑定属性:

    class User{
        constructor(){
            this.name = "tom"
        }
        showName(){
            console.log(this.name)
        }
    }
    const tom = new User()
    console.log(tom.name) // 输出tom
    
  • 静态属性声明
    若要定义属于类本身而非实例的属性,可添加static关键字:

    class User{
        static name = "tom"
        showName(){
            console.log(User.name)
        }
    }
    console.log(User.name) // 输出tom
    
  • 通过原型对象添加属性
    类的原型对象上的属性会被所有实例共享,适合无需每个实例单独持有属性的场景:

    class User{
        showName(){
            console.log(this.name)
        }
    }
    User.prototype.name = "tom"
    const tom = new User()
    console.log(tom.name) // 输出tom
    
  • 私有字段声明
    用#前缀定义只能在类内部访问的私有属性:

    class User{
        #name = "tom"
        showName(){
            console.log(this.#name)
        }
    }
    const tom = new User()
    tom.showName() // 输出tom
    // console.log(tom.#name) 直接访问会报错,外部无法访问私有字段
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:45:51