Инициировать и вернуть класс в классе в Node.js - PullRequest
1 голос
/ 13 марта 2020

У меня есть этот класс, который мы будем называть Connection, и в этом классе есть функция с именем Disconnect, которая возвращает класс с именем PartialConnection. Есть несколько аргументов для обоих классов, но их не следует принимать в силу, потому что это довольно сложно для такого примера.

Это структура класса, с которой я работаю как эскиз:

const BaseConnection    = require("./BaseConnection.js");
const PartialConnection = require("./PartialConnection.js");

class Connection extends BaseConnection { // BaseConnection is also a class with standard variables every type of connection should have. PartialConnection also extends from this.
  constructor () {
    ...
  }

  Disconnect() {
    return new PartialConnection();
  }
}

Прежде чем вы все спросите, путь к ./PartialConnection.js указан правильно, и для него задано module.exports = PartialConnection; с PartialConnection в качестве имени класса.

Файл PartialConnection. js

const Connection = require("./Connection");
const BaseCon    = require("./BaseConnection");

class PartialConnection extends BaseCon {
  constructor () {
    ...
  }
}

module.exports = PartialConnection;

Хотя, я должен сказать, что окраска module.exports = PartialConnection выключена, как показано здесь: https://imgur.com/a/pB9yLW5 - Я также должен сказать, что при выполнении того же функция, но для PartialConnection to Connection, он просто отлично работает. Это связано с циклическими ссылками.

Когда я создаю новый экземпляр Connection и запускаю функцию Disconnect, он возвращает следующую ошибку:

/Users/---/Desktop/Projects/QDB/lib/Connections/Connection.js:87
        return new PartialConnection();
               ^

TypeError: PartialConnection is not a constructor
    at Connection.Disconnect (/Users/---/Desktop/Projects/QDB/lib/Connections/Connection.js:87:16)
    at process.<anonymous> (/Users/---/Desktop/Projects/QDB/lib/Connections/Connection.js:76:75)
    at process.emit (events.js:219:5)

(I вычеркнул мое имя для приватности.)

Как видите, я не могу инициировать и вернуть какой-то новый класс. Раньше это работало в течение нескольких недель go, но теперь это не так.

Версия;

$ node -v
v13.3.0
$ npm -v
6.14.2

И для пояснения - я бы хотел, чтобы это почти буквально прекратить текущий класс и вернуть новый класс, который не позволяет вам вносить изменения в класс Connection.

Если у вас есть какие-либо решения или вы можете чем-либо помочь, это очень ценится!

1 Ответ

0 голосов
/ 13 марта 2020

Хорошо, поэтому я немного поэкспериментировал и обнаружил, что, если вам требуется класс внутри функции, а не в начале файла, он кешируется мгновенно, и вы можете вызывать его, а не возвращать пустой объект.

const BaseConnection = require("./BaseConnection");

class Connection extends BaseConnection {
  constructor () {
    ...
  }

  Disconnect() {
    const PartialConnection = require("./PartialConnection");
    return new PartialConnection();
  }
}

Если у вас есть какие-либо другие ответы, позже, не стесняйтесь поделиться!

...