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
Вроде норм подход, чем тебе не понравился?

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

UIjs 24.04.2015 15:37

Цитата:

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

Делает.

Цитата:

Сообщение от Erolast
Ты попутал статик и конст.

Не попутал. Ты попутал.

Цитата:

Сообщение от Erolast
У меня нативные классы работают уже сейчас уже пол года, как и все прочие фишки ES6.

Ты прав. То что мое работает уже сейчас не аргумент. НО я подумал чт ты говоришь про НАТИВНУЮ поодержку классов а ЕЁ НЕТ. Если же ты хвастался НЕ НАТИВНОЙ ПОДДЕРЖКОЙ тогда к чему был тот бред? классы уж как лет 10 есть в кофескриптах например. при чем тут опоздал тогда???

Цитата:

Сообщение от Erolast
Зачем?

Чтобы не инициализировались контроллеры которые не используются. Чтобы можно было определять контроллеры в произвольном порядке а не обязательно ребенок под родителем.

UIjs 24.04.2015 15:51

Gozar, ой а погодика, у меня же появится отложеная загрузка зависимостей из uiмаркета типа пишешь модуль, если его нет подоключеного как файла то он пытатся подгрузиться из маркета прозрачно для тебя (и кэшируется на пару дней). Я просто часто используемые оставлю контроллеры и компоненты. А редкоиспользуемые вынесу в маркет и все О_О

На этой штуке мы уже нашей студией клепаем сайтики) меня доолго и сильно уговаривали "закрыть код" и начать продавать её, на что я обьяснил что продавать это бессмысленно потому что ни кто не купит а кому надо то украдут, а кому не надо было ещебольше ненадо станет. а вот создать маркет компонентов где люди смогут пилить что то и нувыпоняли. это уже тема. и будут люди указывать допустим

ui.controller('MyUser', ['$md5'], function($md5){

})

и если md5 не подключен как яваскриптовый файл, то он загрузится из сети. Какие подводные камни? п.с. но ИИМХО кэш кэшем конечно, но мне кажется лучше все в оном файле

Gozar 24.04.2015 16:11

Цитата:

Сообщение от UIjs
считаю что 100 килобайт

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

Цитата:

Сообщение от UIjs
переопредели

мм...
Цитата:

Сообщение от UIjs
ну переопредели

опять переопредели?! не многовато нужно всего переопределять? лень мне как-то.

UIjs 24.04.2015 16:15

Цитата:

Сообщение от Gozar
а лишь про дублирование функционала

стоп, я не понгимаю тебя, какой функцинал дублируется? С ЧЕМ дублируютс я мои контроллеры? мой промис отличается от встренного в браузер, мой localStorage отличается и.т.п. с чем дублироваться то будут я так и не понял?

ну есь вот у меня $md5 ну есть у тебя свой $md5 ну не подгружай ты свой md5 используй мой md5. что не так? Или у тебя уже пак из которого md5 не вырвать?

Gozar 24.04.2015 16:15

Цитата:

Сообщение от UIjs
не подключен как яваскриптовый файл, то он загрузится из сети

Да у меня мечта, чтобы по инклюду из сети тянулись модули, но я хочу нативную поддержку, либо через babel. Сторонняя либа, имхо, подход устарел, если он делает всё. Сторонняя либа нужна если она делает что-то одно, но очень хорошо. Unix way, имхо, хорош.

Gozar 24.04.2015 16:16

Цитата:

Сообщение от UIjs
мой localStorage отличается

Почему? Нужно учить функционал? Ну я об этом тоже упоминал, если что.

UIjs 24.04.2015 16:17

Цитата:

Сообщение от Gozar
Почему?

ну он наследует от ивент эмиттера так чт там можно делать on и off на события изменения ключей. а так же он не строки сохраняет а обьекты в json. и.т.п.

Gozar 24.04.2015 16:19

Цитата:

Сообщение от UIjs
он не строки сохраняет а обьекты в json

Ну дык у меня либа тоже самое делает. Но это легкая обертка.

Я к тому, что зависимость от либы тяжела.

UIjs 24.04.2015 16:23

я не понимааююю, я правда не врубаю, обьясни в чем проблема? какой функционал С ЧЕМ дублируется я до сих пор не врубил). ЕСЛИ ТВОЯ ЛИБА делает то же самое ТО ЗАЧЕМ ЕЁ ПОДКЛЮЧАТЬ? К тому же если ты подключаешь что то то ЗАПРЕЩЕНО ПО СТАНДАРТУ использовать это НЕ как контроллер, то есть ты обязан будешь обернуть это в контроллер (2 строчки кода)

Просто ответь на мой вопрос, С ЧЕМ дублируется мой встроенный функционал? Если у тебя есть свой,болеее крутой чем у меня аяксер, то ради бога, подключи и используй свой, если нет то используй мой.

Gozar 24.04.2015 16:27

UIjs,
Я хз, что ты так нервничаешь. Я просто пытаюсь понять смысл твоего поделия. Пока не доходит. Смысл поделия babel для меня однозначно очевиден: писать на es6 со всеми плюхами, а дальше и на es7.

А вот смысл твоей либы, я пока теряюсь в догадках. У неё какое-то реальное преимущество есть перед тем же babel? Загрузка модулей из сети я так понял плюс? но уникальный твой синтаксис это ведь минус.

Я просто хочу понять, почему ты идешь путем изобретения, я по такому пути шел и больше ни за что не пойду. Велосипеды хороши пока их изобретаешь.

Gozar 24.04.2015 16:29

Цитата:

Сообщение от UIjs
Просто ответь на мой вопрос, С ЧЕМ дублируется мой встроенный функционал? Если у тебя есть свой,болеее крутой чем у меня аяксер, то ради бога, подключи и используй свой, если нет то используй мой.

Плюсы неочевидны, может мне тогда jquery взять? Может перечислишь плюсы своей либы столбиком, чтобы был предметный разговор?

Gozar 24.04.2015 21:15

UIjs,
Чёт я не понял, ты где? Ты насоздавал десятки тем про свою либу и теперь не можешь описать её плюсы? Или ты плюсы описываешь? :) Если нет, то ты же понимаешь что это значит?!

UIjs 25.04.2015 03:10

Цитата:

Сообщение от Gozar
А вот смысл твоей либы, я пока теряюсь в догадках.

О_О Каркас для создания UserInterface какбы. Ты забыл штоле? Какой смысл у ангуляра? Такой и у юишки. Я просто гооврою что мол помните я функцию class делал. Нутак вот, она не пропала даром а перекочевала в этот фреймворк и развилась. И показал че она умеет)

Ну а заодно и небольшой трейлер к фреймворку. Я не совсем понял. Ну есть у тебя локалсторч который делает то же самое. Ну и отлично же. Значит тебе не придется его подключать так как он УЖЕ ВСТРОЕН В МОЮ ЛИБУ. и ты спожешь использовать мою либу БЕЗ ПОДКЛЮЧЕНИЯ какой то сторонней фигни так как уже из коробки в ней все это есть. Разве не здорово?

jscripter 25.04.2015 08:48

Цитата:

Сообщение от UIjs
Вот кстати че она может:

LOL, ну и что же она такого может, что не может обычный JS?
Animal={
 create: function(){return Object.create(this)},
 createPrivate: function(name){this.say=function(){alert(name)}}
}
Animal.createPrivate("Animal")

with(Rabbit=Animal.create()) createPrivate("Rabbit")
Animal.say() //  Animal
Rabbit.say() //  Rabbit

может проблема в том, что эти идиоты JS ниасилили? И тут, кстати, настоящая приватность, а не то что у тебя.
Цитата:

Сообщение от UIjs
кофескрипта

годная расстановка над этим говном
https://www.linux.org.ru/forum/web-d...5?cid=11492226

UIjs 25.04.2015 09:08

jscripter, слишком толсто, попробуй потоньше.

Gozar, вот пример того для чего классы нужны http://www.youtube.com/watch?v=sFMtIGhZENE

Gozar 25.04.2015 09:16

Цитата:

Сообщение от UIjs
Какой смысл у ангуляра?

Я хз, я на нём не пишу. Я пишу на Reactjs. У него смысл в наследовании компонентов(ака классов) и быстром html. Но минусы исходят из плюсов потоком сложно управлять.

Огласите весь список пожалуйста. (с)

Сэкономь себе и нам время, напиши плюсы и минусы твоей ui и ангуляра. Сейчас за ангуляр то, что его гугловцы пишут, известность знаете ли. Но если у тебя будет однозначно больше плюсов, то почему бы и нет?!

UIjs 25.04.2015 09:18

Цитата:

Сообщение от Gozar
Но если у тебя будет однозначно больше минусов, то почему бы и нет?!

тонка)) лан, опишу вечерком че может либа и чем лучше уже имеющихся.

Gozar 25.04.2015 12:11

Цитата:

Сообщение от UIjs
я исправился еще год назад

Возьми с полки пирожок :) Я тебя об этом не просил, так что мне неважно.

Цитата:

Сообщение от UIjs
я исправился еще год назад

Цитата:

Сообщение от UIjs
да у тя баттхерд, инвалид

Да, да очень заметно :)

UIjs 25.04.2015 14:42

Цитата:

Сообщение от Gozar
Да, да очень заметно

лан, че там по видео?) http://www.youtube.com/watch?v=sFMtIGhZENE

Gozar 26.04.2015 11:57

Цитата:

Сообщение от UIjs
лан, че там по видео?)

Словесный понос на протяжении всего видео вымораживает. Если честно, то я не осилил, после 4 минуты смотреть дальше не стал, в перемотке тоже не спасло. Изложи пожалуйста свои мысли на бумаге, очень желательно чтобы они были последовательные и без исправлений кода, а затем если хочешь снять видео, зачитай с листа. Я ничего не понял.

UIjs 26.04.2015 19:37

То есть процесс подготовки и рассуждения отвлекают от сути? Не хочется смотреть как я додумываю хочется чтобы я уверенно четко нес инфу?

а вот еще видео сделал))) http://www.youtube.com/watch?v=IcW_bKOln-U

Gozar 26.04.2015 19:57

Цитата:

Сообщение от UIjs
Не хочется смотреть как я додумываю хочется чтобы я уверенно четко нес инфу?

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

Цитата:

Сообщение от UIjs
рассуждения отвлекают от сути?

да.

Я понимаю, что ты писал свою либо 2 года, но я то её вижу впервые, да ещё и в кофе. Любые даже самые незначительные ошибки сбивают с толка. А ты не просто делаешь мелкие правки, ты ещё и делаешь их в громадном количестве.

Если я начну рассуждать (в виде sql запросов) о связях в orientDB, как у меня таблички связываются четырех уровневыми пробежками out по граням и что тут я могу json-чиком хранить или лучше не надо, а может потом, ты ничего не поймешь, даже если до этого ты и писал mysql запросы.

Объясняешь Class, так объясни сначала, а потом рассуждай, что там можно с ней сделать. И зачем ты в видео вставил рассуждения про сервер? Оглавление знаешь что такое? Ты сможешь сделать оглавление к твоему видео, по минутам. Если не сможешь, то твоё видео это словесный бессвязный бред!

UIjs 26.04.2015 20:54

Понял, ни разу не было чтобы я нормально записал видео. Попробую зарание заготовить текст.

UIjs 27.04.2015 17:31

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

Gozar 27.04.2015 17:53

Цитата:

Сообщение от UIjs
минусуя в карму

Обострение у слабонервных :)

UIjs 28.04.2015 07:11

Цитата:

Сообщение от Gozar
Обострение у слабонервных

Да не, я просто указал где именно читать надо) "Изменяя карму" просто не звучит)

Администрация, прошу дать награждение за смайлик человеку который хвалит меня плюсуя в карму. Такое поведение пользователей не ставит под сомнение серьезность ресурса, в добавок к отличным статьям. Мне помнится меня за такое поощряли, и правильно делали.

Erolast 28.04.2015 08:18

Цитата:

Чтобы не инициализировались контроллеры которые не используются. Чтобы можно было определять контроллеры в произвольном порядке а не обязательно ребенок под родителем.
Попробуй каждый класс выносить в отдельный модуль - тогда порядок не имеет значения (его попросту нету).

Цитата:

Цитата:

Инкапсуляция свойств в нэймспэйс еще не делает их приватными.
Делает.
В ES6 с помощью WeakMap можно добиться настоящих приватных переменных, недосягаемых вне класса. Не пробовал ими воспользоватьсая?

Цитата:

Цитата:

Ты попутал статик и конст.
Не попутал. Ты попутал.
В es static - это свойство класса. Или у тебя там ссылка на конструктор?

kobezzza 28.04.2015 10:59

Цитата:

В ES6 с помощью WeakMap можно добиться настоящих приватных переменных, недосягаемых вне класса. Не пробовал ими воспользоватьсая?
Да какая разница доступно свойство или нет, private и protected - это удобные слои абстракции, а не "защита от злобных хакеров", поэтому нет смысла заморачиваться с "безопасностью".

Но я был бы рад, если бы в JS добавили модификаторы свойств класса, а ля Java.

class Foo {
  private method() {
  }

  protected prop = 1;

  // По умолчанию свойство публично
  someMethod() {
  }
}


Это просто синтаксически наглядно и позволит улучшить статический анализ в IDE.

UIjs 28.04.2015 11:16

Цитата:

Сообщение от kobezzza
если бы в JS добавили модификаторы свойств класса

при чем это вполнеможно "внутри ядра" реализовать Symbol ами. грубо говоря. то есть и заморачиваться не придется, чисто сахар напилить

Цитата:

Сообщение от Erolast
Не пробовал ими воспользоватьсая?

не сосем понимаю в чем проблема то? я же уже этого достигнул и с красивым синтаксисом, не? ну то есть приватные внутри класса видны, а вне не видны. и нет конфликта имен.

Цитата:

Сообщение от Erolast
Или у тебя там ссылка на конструктор?

да, ссылка на "конструктор". но у меня как бы класс и конструктор 2 разные сущности:

function Class() { /*один код*/ }
Class.prototype.constructor = function(){ /*другой код*/ }


static это Class

nerv_ 28.04.2015 11:32

Цитата:

Сообщение от Erolast
В ES6 с помощью WeakMap можно добиться настоящих приватных переменных, недосягаемых вне класса.

и получить утечки памяти? :)


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