我在Javascript(Node(中遇到了一些OOP问题。
我创建了一个名为Bubble的类。这个类有一个接受令牌的构造函数。现在,问题来了:
class Bubble {
constructor(token) {
if (!token) throw new Error('No token');
this.token = token;
}
first = new First(this.token)
second = new Second(this.token)
third = new Third(this.token)
如果我执行 第二个三个我该怎么做?new Bubble("someToken").first
,则会传递一个null令牌。但是,如果我将第一个、第二个和第三个一个、
您的代码使用公共类字段,尽管几乎所有地方都支持这些字段,但它们仍然不是标准的一部分。问题是,字段初始化器在构造函数之前执行,无论它们在文本上位于何处:
class A {
field1 = console.log('field initializer 1')
constructor() {
console.log('constructor')
}
field2 = console.log('field initializer 2')
}
new A
因此,在first = new First(this.token)
中,还没有定义token
。一种变通方法是将类字段转换为"类"字段;正常的";属性,在构造函数中初始化:
class Bubble {
constructor(token) {
if (!token) throw new Error('No token');
this.token = token;
this.first = new First(this.token)
....etc
}
class Bubble {
constructor(token) {
if (!token) throw new Error('No token');
this.token = token;
}
get first() {
return new First(this.token);
}
get second() {
return new Second(this.token);
}
get third() {
return new Third(this.token);
}
}
有了这些getter,访问它们就像调用方的常规属性访问一样。
const bubble = new Bubble("token");
bubble.first
bubble.second
bubble.third