こんにちは。
外部ファイルに定義したクラスを使用する方法です。
ちょっとハマったので、失敗例も記載してます。
概要
外部ファイルにクラスを定義して
それを利用するサンプルを作りたい。
クラスを定義するファイルをclassFile.jsとします。
失敗例
classFile.js
class ColorClass { constructor(c) { this.color = c; } display() { console.log(`color = ${this.color}`); } }
呼び出し元
const colorClass = require('./classFile'); let color = new colorClass('Red'); color.display();
結果
let color = new colorClass('Red'); ^ TypeError: colorClass is not a constructor
上記のようなエラーとなりました。
コンストラクターじゃないって怒られました。
問題があったのは、classFile.jsです。
クラスをエクスポートするのを忘れていますね。
次の章で正しい記載を記述します。
1つのみのクラスが定義されている場合
パターン1
class ColorClass { constructor(c) { this.color = c; } display() { console.log(`color = ${this.color}`); } } module.exports = ColorClass;
パターン2
module.exports = class ColorClass { constructor(c) { this.color = c; } display() { console.log(`color = ${this.color}`); } }
呼び出し元
const colorClass = require('./classFile'); let color = new colorClass('Red'); color.display();
結果
color = Red
複数のクラスが定義されている場合
複数のクラスを公開する場合は以下のようにします。
クラスを示す名前は何でもOKです。
module.exports = { クラスを示す名前 :クラス名, クラスを示す名前 : クラス名 };
classFile.js
class ColorClass { constructor(c) { this.color = c; } display() { console.log(`color = ${this.color}`); } } class AnimalClass { constructor(a) { this.animal = a; } display() { console.log(`animal = ${this.animal}`); } } module.exports = { Color : ColorClass, Animal : AnimalClass };
呼び出し元
const colorClass = require('./classFile').Color; const animalClass = require('./classFile').Animal; let color = new colorClass('Red'); color.display(); let animal = new animalClass('Dog'); animal.display();
結果
color = Red animal = Dog
以上です。