Расширьте функциональность модуля в node.js - PullRequest
0 голосов
/ 23 апреля 2020

Учитывая модуль module.js, требуемый как таковой:

const MyModule = require('module.js');

, который экспортирует класс Foo, будет ли какой-либо способ "расширить" Foo с помощью метод bar() -> void таким образом, что любой последующий созданный объект Foo может вызвать метод bar()?

Что-то вроде этого:

const MyModule = require('module.js');

MyModule.Foo.bar = () => {
   // do something
};

const obj = new Foo();
obj.bar();

Для справки, скажем, Foo класс определен и реализован следующим образом в module.js:

module.exports = class Foo {
   ...
}

1 Ответ

1 голос
/ 23 апреля 2020

Вы можете добавить любой атрибут в класс и экспортировать этот класс. Все вещества будут иметь этот атрибут.

Определить класс Foo .

class Foo {
  constructor() {

  }

  // define attribute inside
  a() {
    console.log('a');
  }
}

// adding attribute outside
Foo.prototype.c = () => {
  console.log('c');
}

module.exports = Foo;

И добавить еще один атрибут в другой файл.

const Foo = require('./foo');

// define attribute in other file
Foo.prototype.b = () => {
  console.log('b');
}

module.exports = Foo;

И использование:

const Bar = require('./bar');

let foo = new Bar();

foo.a();

foo.b();

foo.c();

Или вы можете определить новый класс Bar , который расширяет Foo и добавить к нему любой атрибут:

const Foo = require('./foo');

class Bar extends Foo {
  constructor() {
    super()
  }

  b() {
    console.log('b');
  }
}

module.exports = Bar;

И используйте его снова как:

const Bar = require('./bar');

let foo = new Bar();

foo.a();

foo.b();

foo.c();

Класс Bar имеет все атрибуты Foo и определяет новые атрибуты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...