potisanのプログラミングメモ

プログラミング素人です。昔の自分を育ててくれたネット情報に少しでも貢献できるよう、情報を貯めていこうと思っています。Windows環境のC++やC#がメインです。

JavaScript プロパティを追加できないクラスを作成する

JavaScriptではclassキーワードでクラスを作成できますが、クラスの実体はObjectなのでプロパティが追加できてしまいます。この動作はObject.seal()静的メソッドで無効化できるため、コンストラクタで自身に適用すればプロパティを追加できないクラスを作成できます。

class A {
    a = 0;
    constructor() {
        // 何もしない。
    }
}

class B {
    a = 0;
    constructor() {
        // 自身をシールする。
        Object.seal(this);
    }
}

const a = new A();
const b = new B();
a.x = 0;
b.x = 0;
console.log(a) // Object { a: 0, x: 0 }
console.log(b) // Object { a: 0 }

既存のプロパティも変更を許さない場合はObject.freeezeも使えますが、通常はget x()で使用するかと思います。