Наследование модулей в js
Осталось разобраться, как наследовать модули и тогда все будет просто шикарно.
Мне уже показывали пример со сложным-обычным пересобиранием объекта в forin, c использованием приватных свойств в конструкторе. Но мне хочется узнать, какой вариант самый оптимальный и каким пользуетесь Вы?
Некоторые говорят, что искать ооп в js глупо, но мне тяжело в это поверить, так как все что нужно для ооп, это создать наследование приватной области в модулях. Наверняка стандарт к этому и идет, раз они в нативе организовали и модули и импорт, но ждать привата нет времени и хочется писать код уже сейчас, но самое главное, писать его адекватно. Но адекватности без наследования нет, так же как и нет её с использованием в одном приложении и модулей из-за инкапсуляции и не модулей с одними паблик.
Я в замешательстве, что делать? Как вы с этим боретесь?
Добавлено:
У меня тогда вот ещё какой вопрос - код ниже не нарушает принцип модуля?
var module = ( function( ){
function CustomObject( ){
}
CustomObject.prototype = {
constructor: CustomObject
};
return CustomObject;
}( ) );
И почему вы считаете инкапсуляцию лишней?
Вам не кажется, что введение модуля в натив сделано не только для
подтягивание-импорта частей кода, но и из-за приватной области.
Во многих статьях и книгах делают упор на приватную область,
ставя её, как достоинство.
Добавлено ещё:
А TypeScript, это хороший совет, но для начала мне нужно разобраться
в чистом js.
Все что мне осталось, это модули. Просто вот как я вижу js - из-за того,
что части кода нужно, как-то связывать, придумали и реализовали модули.
Модули предоставляют не только связанность, но и некую приватную область,
которую во всех статьях показывают так, что это можно назвать акцентированием.
И раз возвращение модулем ссылки на конструктор не нарушает принцип модуля
, это дает возможность наследования, наследования не классов, а прототипного
наследования. А раз есть наследование, то как воспринимать приватную область модулей?
Дополнено 2:
var Super = ( function( ){
function Super( ){
// ...
}
Super.prototype = {
constructor: Super
};
return Super;
}( ) );
var Sub = ( function( super ){
function Sub( ){
super.call( this );
}
Sub.prototype = Object.create( super.prototype );
Sub.prototype.constructor = Sub;
return Sub;
}( require( './super.js' ) ) );