Показать сообщение отдельно
  #9 (permalink)  
Старый 19.03.2013, 11:35
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от melky Посмотреть сообщение
Интересно, чем не устраивает обычный стиль - прототипное наследование?
А тут почти тоже самое (с точки зрения конечного результат тоже самое), просто к прототипу дочернего объекта примешивается прототип родительского. А удобно тем, что легко описывать древовидные свойства прототипа, например:

function parent() {}
parent.prototype.myProp = {
    a: {b: {...}},
    c: {...},

    onEvents: {onInit, onRemove}
};

function child() {}
child.prototype.myProp = {
    a: {b: 2},
    c: [1, 2, 3],

    onEvents: {onUpdate}
};

extend(parent, child);


При подмешивании прототипов происходит глубокое переопределение/дополнение свойств, и это крайне удобно, когда класс имеет такие свойства (можно бить функциональность по неймспейсам и создавать деревья стандартных настроек инстанса).

Пример из реальной жизни: когда работал над новой реализацией отчётов для Яндекс.Метрики, то для графиков использовал библиотеку Hightcharts. У неё очень гибкая и глубокая древовидная система настроек, а многие отчёты могут отличаться на n-м уровне настроек, при этом каждый отчёт является классом, т.к. мы можем захотеть создать инстанс например для виджета на дашборд или внешнего виджета. Получается, что у класса отчёта в прототипе прописаны настройки для Hightcharts и дочерний класс просто переопределяет или дополняет любой уровень настроек.

Из плюсов такого подхода: значительно более гибкая система наследования.
В плане затраты ресурсов и скорости работы они одинаковы, т.к. конечный код с точки зрения интерпретатора JS один и тот же, т.е. это просто сахар.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 19.03.2013 в 12:26.
Ответить с цитированием