(JavaScript)除了将变量声明为类中的构造函数之外,不能声明它吗?



(我使用谷歌翻译)

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

上面的代码输出Tom。但是如果我像这样改变第二行,我就会得到一个错误。

var name="Tom"
let name="Tom"
const name="Tom"
this.name="Tom"

类字段语法的设计方式,这样一行可以做一件事情:它分配给实例的一个属性。

this.name = "tom"在语法上是不允许的,因为它是多余的。

var name =和其他变量不允许在该位置,因为它们是变量声明关键字(var,let,const) -使用哪个关键字对新创建的变量的作用域有不同的含义,以及它是否可以重新分配。但是这在类字段的上下文中是没有意义的,因为你不是在创建一个新的标识符,你是在给一个对象的属性赋值。

class User{
name="tom"

相同
class User{
constructor() {
this.name = "tom";
}

name不是在特定作用域中创建的新变量——它只是一个属性,因此在声明varletconst时会混淆两个完全不同的概念,因此禁止使用。

所以你只能做

class User{
name="tom"

(除非您希望属性是私有的(只能从类内部使用),在这种情况下,在属性名的前面加上#。)

class User{
#name="tom"

我认为你想要的问题是知道在js类中声明变量的另一种方式。因此,你可以使用构造函数来实现这一点,像这样:

class User{
constructor() {
this.name = "tom"
}

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

将打印"tom"。

最新更新