◆ 親クラスでプロパティに代入する

constructor って単語が打ちづらいのであんまり constructor を作りたくないです
とはいえ インスタンス作成時に値を設定したいと作るしかありません
あとからプロパティ設定やメソッドで初期化というのもイマイチですし 作成時の設定なら constructor が適切でしょうし

そこでこういうことしてみました

class B {
constructor(obj) {
this._ctor_arg = obj
if (obj && typeof obj === "object") {
Object.assign(this, obj)
}
}
}

class C extends B {
v = 1
w = this._ctor_arg.w || 2
x = 3
set y(v) {
this._y = ~~v
}
}

new C({w: 6.1, x: 7.2, y: 8.4, z: 9.4})

// C { }
// _ctor_arg: {w: 6.1, x: 7.2, y: 8.4, z: 9.4}
// w: 6.1
// x: 3
// _y: 8
// z: 9.4
// v: 1

今回の作りにするクラスが共通で継承するクラス B を作ります
中身は constructor だけで やることは引数をプロパティに入れるだけです

B を継承したクラス C には constructor を書きません
受け取れる引数はオブジェクト 1 つだけに固定します

constructor は設定するだけで処理は行わないという考えならこれで問題ないはず
設定に応じた準備が必要なら そのプロパティの setter を使います
処理順的に C の定義に書いたプロパティのほうが引数で代入したものより優先されるので デフォルト値ありで引数の値を使いたいなら w のようにします
しないと x のようになります

引数は 1 つのオブジェクトだけにしてキーワード引数みたいに使うというのはありだと思いますし こういうインターフェースに統一してみてもいいかも