Javascript - Хранение методов класса в нескольких файлах? - PullRequest
0 голосов
/ 13 января 2020

Возможно ли иметь один класс и распределять его методы по нескольким файлам? Мой класс теперь находится в одном файле, и он становится длинным файлом, в котором становится трудно ориентироваться при разработке.

Я думал о расширении класса, но он строится поверх класса. И несколько расширенных классов не взаимодействуют между собой, верно?

Таким образом, главный файл будет иметь конструктор, а другие файлы будут иметь один или несколько методов своего класса.

Ответы [ 2 ]

2 голосов
/ 13 января 2020

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

Если вы не можете сделать это, то вы можете сделать так, чтобы файл основного класса создал класс:

class Example {
}

... и затем имел несколько файлов, которые добавляют методы к его классу. Прототип:

Example.prototype.doThis = function doThis() {
    // ...
};
Example.prototype.doThat = function doThat() {
    // ...
};

Вы теряете возможность использовать super в этих методах, но кроме этого он работает.

Я думал о расширении класса, но это здание на вершине класса. И несколько расширенных классов не общаются друг с другом, верно?

Я не уверен, что вы имеете в виду, когда не можете общаться между суперклассами и подклассами. Данные экземпляра являются общими для всех, и они могут использовать методы друг друга.

2 голосов
/ 13 января 2020

Вы можете назначать свойства прототипа, как в старые времена, когда вместо class s использовалось function s - импортировать функции из других файлов, а после определения класса назначать свойства :

// main.js
import method1 from './method1';
import method2 from './method2';
// or use require() syntax, depending on how your environment is set up
class Foo {
  constructor(name) {
    this.name = name;
    // ...
  }
}
Foo.prototype.method1 = method1;
Foo.prototype.method2 = method2;
// method1.js
export default function() {
  console.log('method1 running for ' + this.name);
};

И method1, и method2 по-прежнему смогут ссылаться на this для ссылки на экземпляр, точно так же, как они были определены как метод непосредственно внутри Foo.

Вы можете использовать синтаксис import с модулями ES6 (например, <script type="module") или в системе связывания модулей, такой как Webpack. В узле импортируйте с помощью require(path) и экспортируйте, назначив module.exports или свойства module.exports.

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