Как избежать коллизий имен из наследования классов в 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