Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.03.2013, 08:18
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

Как вам такой стиль ООП?
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')
    }
}
Ответить с цитированием
  #2 (permalink)  
Старый 19.03.2013, 08:20
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

Ни одного бинда и.т.п. а наследование для быдла. и вообще мне ни разу не приходилось что то наследовать от чего то, может это потому что я ни одного сайта так и не сделал.
Ответить с цитированием
  #3 (permalink)  
Старый 19.03.2013, 08:27
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

инстанцирование медленное, потребление памяти больше, а так норм)
__________________
.ня
Ответить с цитированием
  #4 (permalink)  
Старый 19.03.2013, 08:46
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

Сообщение от tenshi
инстанцирование медленное
медленнее чем что)?
Сообщение от tenshi
потребление памяти больше
замыкания больше жрут?
Ответить с цитированием
  #5 (permalink)  
Старый 19.03.2013, 09:11
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

как выяснилось строгий сиподобный стиль работает быстрее так как под него куча оптимизаций, для игрушек самое то

этот стиль говно
Ответить с цитированием
  #6 (permalink)  
Старый 19.03.2013, 09:15
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

тогда вопрос

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();

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

Сообщение от megaupload Посмотреть сообщение
Ни одного бинда и.т.п. а наследование для быдла. и вообще мне ни разу не приходилось что то наследовать от чего то, может это потому что я ни одного сайта так и не сделал.
Наследование нужно в больших проектах. По личному опыту работы именно с такими монстрами без него там всё оч грустно. Код в нормальном ОО стиле писать сложнее и времени нужно больше, однако потом такой код очень просто поддерживать и дорабатывать.

Сейчас в своём проекте, над которым работаю последнее время использую паттерн БЭМ, где наследование используется крайне жирно: блок представляет себе полностью инкапсулированную структуру, которая включает в себя и CSS и JS и шаблоны. Для наследования в CSS использую препроцессор Stylus, для шаблонов написал специально свою реализацию: https://github.com/kobezzza/Snakeskin, ну с JS использую паттерн: подмешивания в прототипах (на мой взгляд самое универсально решение).
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 19.03.2013 в 10:12.
Ответить с цитированием
  #8 (permalink)  
Старый 19.03.2013, 11:19
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Интересно, чем не устраивает обычный стиль - прототипное наследование?
Ответить с цитированием
  #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.
Ответить с цитированием
  #10 (permalink)  
Старый 19.03.2013, 12:38
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от kobezzza
https://github.com/kobezzza/Snakeskin
Напомнило:

https://github.com/archimag/cl-closure-template
http://lisperator.net/sytes/
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вам сайт? Джэксон Ваши сайты и скрипты 8 24.09.2012 22:22
как завернуть несколько функций в одну syegorius Общие вопросы Javascript 3 21.09.2012 01:25
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 23:20
Как нарисовать такой фон сайта? SDron Общие вопросы Javascript 5 10.02.2009 15:58
ООП: как создавать наследника от встроенных объектов? Langalier Общие вопросы Javascript 17 02.02.2009 17:07