Наследование модулей в js

Рейтинг: 1Ответов: 2Опубликовано: 31.10.2014

Осталось разобраться, как наследовать модули и тогда все будет просто шикарно.
Мне уже показывали пример со сложным-обычным пересобиранием объекта в 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' ) ) );

Ответы

▲ 3Принят
  1. Я буду резок, но приват не нужен, мне хватает перфикса "_" и JSDoc.
  2. Если хотите приват используйте TypeScript.
  3. Модули никак не наследуются, потому что это просто контейнер, а вот классы да: class Parent {} и class Child extends Parent {}. Вот первая ссылка из гугла: http://javascriptplayground.com/blog/2014/07/introduction-to-es6-classes-tutorial/
▲ 2

Такое ощущение, что в одном месте смешалось понятия "модуля", "ООП на прототипах" и "анонимные самовызывающиеся функции". Модуль - это просто объект, в котором мы храним другие объекты(модули), прототипы и свойства. Это позволяет не загрязнять глобальную область видимости и структурировать приложение. Вот что такое модуль в двух словах: Шаблон Модуль и ни о каком наследование в нем речи не идет, это уже ООП на прототипах и все, что его касается. Даже зависимости require - это уже навешивание красивостей в модуль.

Если будет время и желание, взгляните на фреймворк MooTools.