Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Функция Class жива! (https://javascript.ru/forum/offtopic/55353-funkciya-class-zhiva.html)

UIjs 24.04.2015 09:17

Функция Class жива!
 
А между тем победоносная самая лучшая в мире функция Class развилась и перекочевала жить в ui.js ^_^ и теперь называется extend. Вот кстати че она может:

<script src="//uijs.ru/ui.js"></script>


<script>

    // создадим Родителя
    var Animal = ui.extend({

        constructor: function () {
            this.private.name = 'Animal'; // приватное свойство name
        },

        say: function () {
            alert(this.private.name); // 'Animal'
        }

    });


    // создадим Ребенка и наследуем его от родителя
    var Rabbit = Animal.extend(new function () {

        this.constructor = function () {
            this.private.name = 'Rabbit'; // приватное свойство name
            this.super(); // поскольку перекрыли родительский конструктор, вызовем его
        };


        // перекрываем метод say
        this.say = function () {
            this.super(); // 'Animal'
            alert(this.private.name); // 'Rabbit'
            alert(this.static.prop); // 11
        }

    });

  
    Rabbit.prop = 11;  // зададим классу статическое свойство


    var rabbit = new Rabbit();
    rabbit.say(); // запускаем шарманку

</script>



Также наследовать можно от нативных классов:

<script src="//uijs.ru/ui.js"></script>


<script>

    var List = ui.extend(Array, {

        constructor: function () {
            this.name = 'List';
        },


        // перекроем родительский метод
        push: function (item) {
            this.super(item); // вызовем оригинальный метод
            alert(this.name); // ну и добавим доп функционал
        }

    });


    var list = new List();
    list.push('lol'); // 'list'
    list.push('lol'); // 'list'

    alert(list instanceof Array); // true
    alert(list instanceof List); // true

</script>



Ну а с классами кофескрипта она вообще идеально сочитается, она вообще под них и затачивалась потому что я на нем пишу, просто передаешь класс и все и она его понимает).

P.S. и это лишь маааааалая часть моего мегафреймворка, он коненчо крутой и уже лучше ангуляра и такой же быстрый как реакт потому что использует ассинхронный рендеринг, но еще пол годика или годик нужно подождать до статьи на хабре, он сыроват, я хочу туда добавить ТАКИЕ фишки чтобы волосы на жопе дыбом стояли, вроде переводчика и языковых пакетов. и.т.п. и чтобы перевод можно было делать прям в интерфейсе зажав шифт например и тыкнув на элемент.

Erolast 24.04.2015 11:01

Чувак, ты опоздал. Ребята из TC39 уже реализовали классы на уровне синтаксиса)
http://www.2ality.com/2015/02/es6-classes-final.html

UIjs 24.04.2015 11:27

Erolast, обьяснять? или ты троллишь. ну давай обьясню так и быть. классы существуют уже лет 10 с появлением препроцессеров типа кофескрипта. у меня же есть такая штука как отложеная инициализация. то есть классы опсиываются в любом порядке и при инициализации одного класса засивимости тоже инициализируются. такое не провернуть используя синтаксис. потому что синтаксис требует чтобы выше был обьявлен класс родитель. так же у меня есть приватные и статик свойства. Так же мое работает УЖЕ СЕЙЧАС и прослойка жрет ну максикум 3-5% производительности.


Я уже молчу про то что ни что не мешает использовать и эти классы в фреймворке и делать наследование за рамками фреймворка вручную.

вот как выглядит работа с классами и наследованием контроллеров через кофескрипт


l-liava-l 24.04.2015 11:34

UIjs,
Привет максимус! :)

UIjs 24.04.2015 11:38

l-liava-l,
Привет)) Я теперь Иван Вольнов зависаю на страничке Евгения Вольнова. Так и живем

kobezzza 24.04.2015 12:03

Ого, какие люди вернулись ЖВ

Safort 24.04.2015 12:30

UIjs,
я думал ты умер. //классическая шутка.

Gozar 24.04.2015 12:40

Цитата:

Сообщение от UIjs
языковых пакетов

На это 20 минут нужно, а не год. Архитектура языковых пакетов проста до ужаса, даже в различных вариациях.
Сделай до завтра ;)

Цитата:

Сообщение от UIjs
нативных классов

Хз, я юзаю вот это: https://babeljs.io/docs/learn-es6/#classes , меня устраивает. Хотя мне классы особо и не нужны. Ради интереса сделал класс Ajax, в остальном не знаю куда приткнуть классы. Наверное использование классового подхода сильно зависит от архитектуры.

Цитата:

Сообщение от UIjs
волосы на жопе дыбом стояли

Ну у меня уже встали: watcher, observer, sha512, promise, md5...

Я так понимаю ты пытаешься туда все реализации запихнуть. Люди будут использовать полифиллы + твою реализацию полифилов? Или твою реализацию и если в ней нет нужного полифилла, то + нужный полифилл?

Хз как тебе, но мне проще сделать сборку из нужных полифиллов, в будущем не нужно переучиваться. Иногда ставишь свою обертку, например на localStorage, чтобы работать как с объектом и названия были чистые, а в базе грязные. Вроде норм подход, чем тебе не понравился?

Erolast 24.04.2015 13:37

Цитата:

у меня есть приватные
Инкапсуляция свойств в нэймспэйс еще не делает их приватными.

Цитата:

статик свойства
Ты попутал статик и конст.

Цитата:

мое работает УЖЕ СЕЙЧАС
У меня нативные классы работают уже сейчас уже пол года, как и все прочие фишки ES6. Кури бабель.

Цитата:

у меня же есть такая штука как отложеная инициализация
Зачем?

UIjs 24.04.2015 15:27

Цитата:

Сообщение от Gozar
На это 20 минут нужно, а не год.

лол ну во первых это одона ИЗ фитч, а во вторых я имею ввиду это когда ты открывешь сайт на ui и вводишь в консоли ui.translate() и у тебя открывается допустим этот режим, и ты с шифтом зажатым водишь по сайту и тыкаешь на что то и можно редактировать, переведя весь сайт вводишь в консоли ui.getTranslate() и сохраняешь json файлик с языковым пакетом который потом подключаешь куда нужно.

Фишка в том что если там куда ты тыкнул было просто слово то он запомнит перевод и будет вставлять его в это место и все. Если же ты тыкнул в то место которое подставилось из выраженияну типа {{'dd'}} то тогда проблематично, но я наверное на первых парах просто не разрешу словаиз выражений переводить и все. Так же проблема в том чт разметка динамическая и зависит от данных. Все везде репатится отключается подключается. И нужно определить в какое именно место твой перевод, описаный один раз, вставлять. Так что это ООЧЕНЬ сложная задачка месяца на 1-2. ты просто не верно вначале понял о чем я.

Цитата:

Сообщение от Gozar
Наверное использование классового подхода сильно зависит от архитектуры.

У меня оооочень сильно пригождаются классы, например ты описываешь контроллер List который аяксится с сервером и синхронится с таблицой в базе. И далее ты от него наследуешь разные листы типа MessagesList UsersList и.т.п. описав методы синхронизации с базой один раз в List. Так же я например нативные классы кофескрипта (на котором пишу), не исопльзую, потому что они должны быть обьявлены в строгом порядке, друг под другом, а так же потому что у ни нет приватных а у меня есть. при чем синтаксис не сильно отличается, пишу не super() a @super()

Цитата:

Сообщение от Gozar
Я так понимаю ты пытаешься туда все реализации запихнуть. Люди будут использовать полифиллы + твою реализацию полифилов? Или твою реализацию и если в ней нет нужного полифилла, то + нужный полифилл?

я искренне считаю что 100 килобайт на полифилы не стоят экономии. так как на сайте сраные картинки по 200 килобайт идут. 21 век. я пихаю все на все случаи жизни, так как 400-500кб на библиотеку это приемлимо. и я далеко не уперся еще, у меня минифицировная пока весит 40кб.

Цитата:

Сообщение от Gozar
Хз как тебе, но мне проще сделать сборку из нужных полифиллов, в будущем не нужно переучиваться. Иногда ставишь свою обертку, например на localStorage,

Так юзай свою или переопредели контроллер $localstorage

там же все как и в ангуляре удобно оборачивать в контроллеры и компоненты. плагины на jquery можно оборачивать в компоненты (директивы ангуляра) а какие то либы в контроллеры (сервисы в ангуляре)

Цитата:

Сообщение от Gozar
Вроде норм подход, чем тебе не понравился?

Так мой локалсторч так же работает. Я и хочу на все случаи жизни все запилить, чтобы было лучше чем уже есть у старонних. и я не вижу противоречия. ну реализовал я, ну не нравится тебе, ну переопредели ты контроллер этот, у тех у кого он был в засивимостях ВНУТРИ движка он будет старый а у тебя переопределенный тобой с твоими изменениями)


Часовой пояс GMT +3, время: 21:03.