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()
で使用するかと思います。