ES6 Javascriptでクラスの継承に名前を付けるのを避けるにはどうすればよいですか?ES6 Javascriptクラス継承ネーミングの衝突を回避する方法
大規模なES6 Javascriptアプリケーションでは多くの継承が使用されるため、基本クラスで汎用名を使用すると、後で派生クラスを作成するときに頭痛を緩和することができます。これは貧弱なクラスのデザインの製品ですが、Javascriptがスムーズにスケールアップできるようになるほど問題になるようです。他の言語は、継承された変数(Java)やプロパティ(C#)を非表示にするメカニズムを提供します。この問題を緩和する別の方法は、Javascriptにはないプライベート変数を使用することです。
このような衝突の例を示します。 TreeObjectクラスはEventedオブジェクトを継承しますが(イベント関数を継承するには)、両方ともparent
を使用してその親を格納します。
class Evented {
constructor(parent) {
this.parent = parent;
}
}
class TreeObject extends Evented{
constructor(eventParent, treeParent) {
super(eventParent);
this.parent = treeParent;
}
}
この例は少し人工的ですが、私は私のあちこちで無駄な時間を引き起こしライブラリとエンドアプリケーション間の専門用語はかなり重複しエンバーのような大規模なライブラリで同様の衝突を持っていました。
この質問には唯一の*客観的*回答があります。 –
私は、問題のシンボルがファイルに対してローカルである場合、これがプライベート変数の大きなエミュレーションであることを見ることさえできます。 – Coburn
@Coburn厳密にはそうではありませんが、文字列キーの場合と同じように、誰もが任意のオブジェクトのシンボルキー付きプロパティを列挙できます。 'Object.getOwnPropertyNames'を' Object.getOwnPropertySymbols'に変更するだけです。 – Bergi