ES6 を使用し、Babel を使用して ES5 と互換性のあるアプローチの 1 つを次に示します。
この例では、3 つのファイルを使用して複数のファイルに MyClass を作成します。
index.js (これは重要なので、フォルダー名だけでクラスをインポートできます)
symbol.js (これにはプライベート メンバーのシンボルが含まれます)
additionalMethods.js (後でクラス プロトタイプに添付されるファイル)
index.js コンテンツ
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";
}
symbol.js コンテンツ
const symbols = {
existentPrivateMethod: Symbol("myPrivateMethod"),
additionalPrivateMethod: Symbol("additionalPrivateMethod")
};
export default symbols;
完全なプロジェクト
https://github.com/nicosommi/partialClass
完全解説
https://nicosommi.com/2015/08/10/partial-class-approach-for-es6/