在下面的示例中,创建新节点(此处名为 Node
)的构造函数位于其方法调用它的类的外部:
class Collection {
constructor() {
this.collection = [];
};
addNode(value) {
const node = new Node(value);
this.collection.push(node);
console.log(this.collection);
};
};
function Node(value) {
this.value = value;
}
const col = new Collection();
col.addNode("foo");
但是,我希望在类中包含构造函数(主要是因为它仅由该类使用)。这将失败(x 不是构造函数
):
class Collection {
constructor() {
this.collection = [];
};
Node(value) {
this.value = value;
};
addNode(value) {
const node = new this.Node(value);
this.collection.push(node);
console.log(this.collection);
};
};
const col = new Collection();
col.addNode("foo");
我还知道 Javascript 目前不支持嵌套类。我当前正在做的只是在 addNode
方法中声明 Node
构造函数。
但我很好奇:在调用它的类之外是否可以有这样的构造函数?
最佳答案
选项 1:将 Node
定义为实例字段并将其设置为函数(基本上是您的第一个示例)
class Collection {
constructor() {
this.collection = [];
};
Node = function (value) {
this.value = value;
};
addNode(value) {
const node = new this.Node(value);
this.collection.push(node);
console.log(this.collection);
};
};
const col = new Collection();
col.addNode("foo");
选项 2:使用嵌套类(也是实例字段)
class Collection {
constructor() {
this.collection = [];
};
Node = class Node {
constructor (value) {
this.value = value;
}
}
addNode(value) {
const node = new this.Node(value);
this.collection.push(node);
console.log(this.collection);
};
};
const col = new Collection();
col.addNode("foo");
选项 3:使用上述任一方法,但将其设为静态字段(推荐)。这样就不会为您创建的每个 Collection
实例重新创建该类。
class Collection {
constructor() {
this.collection = [];
};
static Node = function (value) {
this.value = value;
};
addNode(value) {
const node = new Collection.Node(value);
this.collection.push(node);
console.log(this.collection);
};
};
const col = new Collection();
col.addNode("foo");
关于javascript - 是否可以将构造函数作为类中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74176570/