Как вам такой стиль ООП?
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:19. |