Как вам такой стиль ООП?
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, время: 07:18. |