| 
 Как вам такой стиль ООП? 
function Bullet() {
    /*Переменные
     --------------------------------------------*/
    var HTMLElement, animationFrameId;
    /*Свойства
     --------------------------------------------*/
    this.startTime = new Date;
    this.target = new Point();
    this.position = new Point();
    this.speed = 100;
    this.stop = stop;
    this.sayHi = sayHi;
    /*Инициализация
     --------------------------------------------*/
    HTMLElement = document.createElement('div');
    HTMLElement.className = 'bullet';
    document.body.appendChild(HTMLElement);
    render();
    /*Методы
     --------------------------------------------*/
    function render() {
        step();
        this._animationFrameId = requestAnimationFrame(render, HTMLElement);
    }
    function stop() {
        cancelRequestAnimationFrame(animationFrameId);
    }
    function step() {
        console.log('fly');
    }
    function sayHi() {
        alert('hi')
    }
}
 | 
| 
 Ни одного бинда и.т.п. а наследование для быдла. и вообще мне ни разу не приходилось что то наследовать от чего то, может это потому что я ни одного сайта так и не сделал. | 
| 
 инстанцирование медленное, потребление памяти больше, а так норм) | 
| 
 Цитата: 
 Цитата: 
 | 
| 
 как выяснилось строгий сиподобный стиль работает быстрее так как под него куча оптимизаций, для игрушек самое то этот стиль говно | 
| 
 тогда вопрос 
function Bullet() {
    /*Инициализация
     --------------------------------------------*/
    var HTMLElement = document.createElement('div');
    HTMLElement.className = 'bullet';
    document.body.appendChild(HTMLElement);
    /*Свойства
     --------------------------------------------*/
    this.HTMLElement = HTMLElement;
    this.animationFrameId = null;
    this.startTime = new Date;
    this.position = new Point(200, 200);
    this.target = new Point(1300, 500);
    this.speed = 1;
    /*Методы
     --------------------------------------------*/
    this.start = function () {
        this.step();
        this.animationFrameId = requestAnimationFrame(this.start.bind(this), this.HTMLElement);
    };
    this.stop = function () {
        cancelRequestAnimationFrame(this.animationFrameId);
    };
    this.step = function () {
        this.position.x += this.speed;
        this.HTMLElement.style.left = this.position.x + 'px';
        this.HTMLElement.style.top = this.position.y + 'px';
    };
    /* ШТО ЭТО ТАКОЕ И ПОЧЕМУ ОНО НЕ В СЕКЦИИ ИНИЦИАЛИЗАЦИИ????????????? */
    this.start();
}
 | 
| 
 Цитата: 
 Сейчас в своём проекте, над которым работаю последнее время использую паттерн БЭМ, где наследование используется крайне жирно: блок представляет себе полностью инкапсулированную структуру, которая включает в себя и CSS и JS и шаблоны. Для наследования в CSS использую препроцессор Stylus, для шаблонов написал специально свою реализацию: https://github.com/kobezzza/Snakeskin, ну с JS использую паттерн: подмешивания в прототипах (на мой взгляд самое универсально решение). | 
| 
 Интересно, чем не устраивает обычный стиль - прототипное наследование? | 
| 
 Цитата: 
 
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 один и тот же, т.е. это просто сахар. | 
| 
 Цитата: 
 https://github.com/archimag/cl-closure-template http://lisperator.net/sytes/ | 
| Часовой пояс GMT +3, время: 21:55. |