javascript - 是否可以将构造函数作为类中的方法?

标签 javascript class constructor

在下面的示例中,创建新节点(此处名为 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/

相关文章:

javascript - 对齐显示为分数的表单域

javascript - Firestore 导出 Cron 作业未运行 : Error Code 204

python - 如何创建从 raw_input 创建的字典/列表/类

c++ - 为什么赋值运算符重载会创建一个对象的拷贝?

jquery - 允许多个类

Java-根据用户输入更新类的返回数据

javascript - 如何使用 Python 或 Lisp 删除无用的 JavaScript 代码

c# 使用参数的计算结果调用 base()

带有复制构造函数的 C++ 不能很好地工作

javascript - 将 ng-include 用于原始(或编译)HTML 还是模板 URL?