Вот один подход с использованием ES6 и совместимость с ES5 с использованием Babel:
В этом примере я создаю MyClass в нескольких файлах, используя три файла:
index.js (это важно, так что вы можете импортировать класс только через имя папки)
symbols.js (содержит символы для частных пользователей)
extraMethods.js (файл, который позже присоединяется к прототипу класса)
index.js content
import symbols from "./symbols";
export default class MyClass {
[symbols.existentPrivateMethod]() {
return "this is the result";
}
}
import additionalMethod, {anotherAdditionalMethod, additionalPrivateMethod} from "./additionalMethods";
const additionalMethodsObject = {
additionalMethod: additionalMethod,
anotherAdditionalMethod: anotherAdditionalMethod
};
additionalMethodsObject[symbols.additionalPrivateMethod] = additionalPrivateMethod;
Object.assign(MyClass.prototype, additionalMethodsObject);
AdditionalMethods.js содержимое
import symbols from "./symbols";
export default function additionalMethod() {
return this[symbols.existentPrivateMethod]();
}
export function anotherAdditionalMethod() {
return this[symbols.additionalPrivateMethod]();
}
export function additionalPrivateMethod() {
return "yet another result";
}
symbols.js content
const symbols = {
existentPrivateMethod: Symbol("myPrivateMethod"),
additionalPrivateMethod: Symbol("additionalPrivateMethod")
};
export default symbols;
Завершить проект
https://github.com/nicosommi/partialClass
полное объяснение
http://nicosommi.com/?p=432