如何避免命名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