なんだかGoodVibes

日々の勉強メモです。

【Node】外部ファイルに定義したクラスを使用する

こんにちは。
外部ファイルに定義したクラスを使用する方法です。
ちょっとハマったので、失敗例も記載してます。


概要

外部ファイルにクラスを定義して
それを利用するサンプルを作りたい。

クラスを定義するファイルを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



以上です。