Nodejs:从实例变量中引用构造函数变量



我在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
}
一个选项是将类方法实现为getter。以下是您的示例中的情况:
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

最新更新