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
相关产品推荐
相关产品推荐

