![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| cruelangel |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
скачать откомпилированную версию
посмотреть исходники через SVN идеология: - сглаживание неровностей между различными браузерами - реализация удобных расширений объектной модели - простота и наглядность кода с минимумом браузеро-специфичных участков - модульность и простота адаптации к существующим фреймворкам что пока есть: - расширение базовых прототипов Object, Array, Function, String, Number - обогащение экземпляров Event (на очереди - Range, Selection, StyleSheet) - враппинг узлов DOM-а - алерт-панельки вместо стандартного модального окна - динамическая подгрузка html скоро также ожидаются: - расширения для других объектов - визивиг редактор отличительные особенности: - благодаря враппингу (а не обогащению, как в других фреймворках) можно работать с любыми узлами DOM (а не только с html-элементами), используя при этом всю мощь объектной модели. для доступа к самому DOM-узлу используется поле raw. - используя один и тот же синтаксис можно вешать обработчики событий как на элементы html, так и на любые другие объекты, причём вы можете свободно определять свои события и вешать произвольное количество обработчиков. - объём пока 12кб в непожатом виде (финальная версия ожидается примерно в два раза больше). несколько примеров:
в коде можно найти ещё пару интересных примеров... а теперь, внимание, вопрос: у каждого объекта есть есть метод $each, который применяет переданную ей функцию к каждому "установленному" полю объекта (то есть оно не должно быть null, undefined и не должно быть равно соответствующему полю прототипа объекта). также у каждого объекта есть метод $give, который должен копировать поля объекта объекту, переданному параметром (например, $object.$give(window)). так вот, возможны две реализации: 1. применяется метод $each и копируются только "установленные" поля 2. копируются вообще все поля никак не могу определиться, какой из них является труъ, пока остановился на втором. ну и вообще, буду рад интересным идеям по усовершенствованию фреймворка. Это сообщение отредактировал(а) cruelangel - 7.10.2007, 20:10 |
||||||||
|
|||||||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
добавил аякс. тест
|
|||
|
||||
| AKS |
|
|||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 2 Всего: 52 |
cruelangel, при беглом просмотре обратил внимание на странный способ клонирования:
В чем суть? |
|||
|
||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
суть в том, что числа наследуют методы от объекта. в частности, $clone для объекта выглядит так:
|
|||
|
||||
| Zeroglif |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 1 Всего: 66 |
В каком месте определяется, от примитивного значения обратились к Number.prototype или от объекта соответствующего подтипа? Немного посмотрел... Зачем все нативные прототипы, наследующие от Object.prototype (Array.prototype, Function.prototype...), расширяются теми же кастомными слотами/свойствами, что и сам Object.prototype? Зачем в первой же функции $object.$get идёт сравнение с одноимённым свойством прототипа, такой код разве не валиден:
И та же самая странная проверка одноимённого свойства для случая, когда есть слот prototype, в функции $object.$each. Вычисление браузера сделано на базе модифицируемых строк, то бишь ненадёжное. Объекты заводятся без var неполным именем, возможен конфликт с одноимёнными id/name в IE. Родной наиважнейший toString убит ради смешной визуализации, увязанные с ним вещи уже не осуществить. Прототипы по кругу массово обвешаны, я бы вообще-то призадумался о "простоте адаптации к существующим фреймворкам". И $зачем $тебе $доллар $в $таких $количествах, $читать $тяжело, $смысла $мало, $доллар is intended for use only in mechanically generated code... |
|||
|
||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
> В каком месте определяется, от примитивного значения обратились к Number.prototype или от объекта соответствующего подтипа?
что б я ещё знал как это проверить > Зачем все нативные прототипы, наследующие от Object.prototype (Array.prototype, Function.prototype...), расширяются теми же кастомными слотами/свойствами, что и сам Object.prototype? а это напрямую связано с моим вопросом в первом посте > Зачем в первой же функции $object.$get идёт сравнение с одноимённым свойством прототипа, такой код разве не валиден: валиден, но в данном случае можно считать, что собственное значение свойства у объекта "сброшено". или у тебя есть другие варианты проверки? поясню для чего это надо: так как я расширяю прототип всех обектов, установленные мною поля наследуются всеми объектами, а в некоторых случаях требуется чистый и незамутнённый родителями хэш. использование $each и $get позволяет работать с объектом, как с чистым хэшем. > Вычисление браузера сделано на базе модифицируемых строк, то бишь ненадёжное. там в основном проверяется appName, который никто не меняет. по userAgent определяется только сафари, но у него обычно его тоже не меняют. есть более надёжные способы? > Объекты заводятся без var неполным именем, возможен конфликт с одноимёнными id/name в IE. это щас исправлю > Родной наиважнейший toString убит ради смешной визуализации, увязанные с ним вещи уже не осуществить. пример? мне, например, куда интереснее получать от ноды её сериализацию, а не непонятные "[HTMLParagraphElement]", с которыми дальше делать особо нечего. > И $зачем $тебе $доллар $в $таких $количествах, $читать $тяжело, $смысла $мало чтобы чётко выделялись среди других объектов/методов и случайно не пересекались с пользовательскими. > $доллар is intended for use only in mechanically generated code дык у меня скрипт механически компилируется из модулей пхп-скриптом Это сообщение отредактировал(а) cruelangel - 6.10.2007, 00:39 |
|||
|
||||
| Zeroglif |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 1 Всего: 66 |
Дело не в этом. Функция Number.prototype.$clone не клонирует объекты (подтип Number), возвращает их же, а в отношении примитивных значений меняет тип:
Та же кухня у тебя и в отношении клонирования строк, объекты не клонируются, примитивы меняют тип. Ну, и в toString то же самое, имеем объект на выходе из функции по имени "вСтроку". Если ты изнасиловал Object.prototype, то массивы и проч. с этим насилием уже могут работать, наследуют они его, зачем ещё раз поступать с ними точно так же грубо. Оно не сброшено, не закрыто, ты сравниваешь свойство f.x и f.prototype.x (из моего примера), это разные не связанные наследованием объекты, "к чистому хешу" это никак не относится.
Меняют, любители есть, гарантия слабая. Проверка конкретных свойств под конкретную задачу в момент конкретного кроссбраузерного затыка - более правильный подход. Гы... алерт уже отсебятину несёт, или посмотри, как конвертируются объекты при сравнении с другим типом, с каким аргументом (если найдёшь) массив join-ится в строку и т.п. Неа, не вставляет, попробуй 5 долларов вместе соединить или с 2-х сторон, ваще чёткость отжигать будет... |
||||
|
|||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
> Та же кухня у тебя и в отношении клонирования строк, объекты не клонируются, примитивы меняют тип.
у тебя есть более элегантное и жэлезное решение для каскадного клонирования объектов? а критиковать мы все горазды... > Меняют, любители есть, гарантия слабая. Проверка конкретных свойств под конкретную задачу в момент конкретного кроссбраузерного затыка - более правильный подход. через это я уже прошёл, спасибо. особенно весело с таким подходом поддерживать оперу, которая "и нашим, и вашим". ты работал когда-нибудь с выделениями? там затыки на каждом шагу - код превращается в свалку проверок, большая часть которых фактически означает "если ИЕ, то делаем так, иначе делаем через косяк" а насчёт любителей - они прекрасно знают на что идут. > алерт уже отсебятину несёт это основная цель > или посмотри, как конвертируются объекты при сравнении с другим типом объекты конвертятся в список ключей, разделённых запятыми и заключённых в фигурные скобки, массивы - в список значений и скобки квадратные. > Неа, не вставляет, попробуй 5 долларов вместе соединить или с 2-х сторон, ваще чёткость отжигать будет это противоречит удобству использования. более того, я бы рекомендовал не увлекаться средствами, которые "вставляют" - можно плохо кончить. Это сообщение отредактировал(а) cruelangel - 6.10.2007, 02:48 |
|||
|
||||
| AKS |
|
||||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 2 Всего: 52 |
Имена идентификаторам дает машина?
Для того, чтобы помочь найти "элегантное и жэлезное решение", надо понять, зачем это нужно. Я пока так и не понял. Так отредактируйте первое сообщение, добавив: "Критика не приветствуется!". Тогда никто не станет вмешиваться в ваши с фреймворком "интимные" отношения. Останетесь с ним tête-à-tête. ))))))))))))))))))))))) |
||||
|
|||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
> Имена идентификаторам дает машина?
нет, это и не требуется > Для того, чтобы помочь найти "элегантное и жэлезное решение", надо понять, зачем это нужно. Я пока так и не понял. чтобы создать клон объекта и работать с ними независимо друг от друга. например, есть многоуровневый массив и требуется все строковые значения проэкранировать, не загубив при этом исходный массив. > Так отредактируйте первое сообщение, добавив: "Критика не приветствуется!" в яваскрипте довольно дебильная объектная модель. я её исправляю как могу, но не все недостатки удаётся исправить. поэтому критика типа "а вот тут ты не исправил - убей себя" - бесполезна. Это сообщение отредактировал(а) cruelangel - 6.10.2007, 13:42 |
|||
|
||||
| AKS |
|
|||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 2 Всего: 52 |
Так вот об этом и речь: "$доллар is intended for use only in mechanically generated code", а Вы собственноручно этим занимаетесь.
slice Вам не может помочь? Да-а-а. Исправляете, значит? Вот как-раз было бы лучше, чтобы Вы отказались от затеи "исправить" яваскрипт. Уж сколько "добрых дядей" до Вас этим занимались, и все труды напрасны. Тогда бы не было критики: "а вот тут ты не исправил", а наоборот Вас бы похвалили: "молодец, что хоть сюда ты не сунулся". P.S. Вообще Ваша писанина имеет сильный "привкус" от prototype.js... Это сообщение отредактировал(а) AKS - 6.10.2007, 15:08 |
|||
|
||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
> slice Вам не может помочь?
нет, он действует только для массивов и только на один уровень в глубь.
> Вообще Ваша писанина имеет сильный "привкус" от prototype.js это от того, что ты толком не разобрался как минимум в одном из этих фреймворков. Это сообщение отредактировал(а) cruelangel - 6.10.2007, 19:33 |
|||
|
||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
> Вот как-раз было бы лучше, чтобы Вы отказались от затеи "исправить" яваскрипт.
чем лучше? я вижу недостатки и по мере возможностей пытаюсь от них избавиться. ты же просто закрываешь на них глаза приговаривая "в багдаде всё спокойно, яваскрипт - совершенный язык". в яваскрипте нету аналогов метода clone. если он тебе так мешает - можешь его смело вырезать и не использовать. я же нахожу в нём пользу даже в таком несовершенном виде. Это сообщение отредактировал(а) cruelangel - 6.10.2007, 19:47 |
|||
|
||||
| AKS |
|
|||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 2 Всего: 52 |
Вот это да!!! И Вы пишете js-library?
Добавлено через 1 минуту и 41 секунду Покажите конкретный пример, где он нужен "позарез". Добавлено через 9 минут и 41 секунду Так написал, потому что и там, и здесь "нагородили огород" вокруг прототипов встроенных объектов. Все расширения и там, и здесь имеют сомнительную ценность, разве что в самой библиотеке для самих авторов библиотек. Отсюда и соответствующие ассоциации. А что, Вам не по-душе это сравнение? |
|||
|
||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
> Вот это да!!! И Вы пишете js-library?
ты не мог бы развернуть мысль? > Покажите конкретный пример, где он нужен "позарез". в таком случае покажи мне конкретный пример, где "позарез" нужен коть какой-нибудь фреймворк? фреймворки делают для удобства программирования, не для реализации невозможного. Добавлено через 6 минут и 37 секунд > Так написал, потому что и там, и здесь "нагородили огород" вокруг прототипов встроенных объектов. это одна из самых мощных особенностей данного языка. грех ею не воспользоваться. |
|||
|
||||
| AKS |
|
|||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 2 Всего: 52 |
||||
|
||||
| AKS |
|
||||||||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 2 Всего: 52 |
->
Ну так все же Вы исправляете "дебильную объектную модель яваскрипт", или пишете для своего удобства и в свое удовольствие?
Пользуйтесь ради бога. Я написал о сомнительной ценности расширений в контексте вашего высказывания о том, что Вы "исправляете дебильную объектную модель". Т.е. на "исправления" это не тянет... Добавлено @ 20:51 Я никогда и нигде не писал о том, что "яваскрипт - совершенный язык". Однако я твердо убежден, что этот язык не заслуживает того, что о нем очень часто пишут те, кто в яваскрипт, как написал Zeroglif:
Так вот очень многие, будучи не в состоянии провести параллели с привычным интерфейсом, начинают первым делом проклинать яваскрипт, а затем чудить, изобретая всякую всячину, которая на самом деле не нужна даже даром. В результате на свет появляются причудливые js-фреймворки. Но это еще полбеды. Некоторые потом начинают учить яваскрипт по этим самым писаниям. А потом так и говорят, например: "Я выучил яваскрипт через Dojo!". ))))))))))))))))))) Это сообщение отредактировал(а) AKS - 6.10.2007, 21:03 |
||||||||
|
|||||||||
| Zeroglif |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 1 Всего: 66 |
Давай я разверну эту мысль, поверил я в эту либу и решил клонировать с её помощью примитивный такой массивчик:
? |
|||
|
||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
> Ну привел же Ваш переделанный пример, в котором b копирует все "уровни". Или "уровни" - это что-то другое?
я привёл пример, иллюстрирующий, что slice создаёт новый массив, каждый элемент которого ссылается на соответствующие значения исходного. это означает, что изменение элементов одного массива автоматически сказывается и на другом. > Ну так все же Вы исправляете "дебильную объектную модель яваскрипт", или пишете для своего удобства и в свое удовольствие? "дебильная" в моей фразе означает "неудобная и нелогичная" > не видит связи со своей любимой книжкой про С++ ты меня с кем-то спутал. очевидно с создателями prototype.js с ихними классами в жабаскрипте. Zeroglif, достаточно очевидно, что это не работает, потому, что соответствующий метод для Boolean ещё не перегружен. ты слишком многого хочешь от альфа-версии. впрочем, если перегрузить Boolean по аналогии с Number - всё работает. а на счёт изменения типа ты написал ещё на предыдущей странице, не стоит повторяться. ps: вообще, довольно странно, что столь жаркие споры, доходящие до утверждений о бесполезности фреймворка, начались вокруг одного второстепенного метода Это сообщение отредактировал(а) cruelangel - 6.10.2007, 23:14 |
|||
|
||||
| AKS |
|
||||||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 2 Всего: 52 |
Ну так и вложенным массивам - slice! Так и надо было сразу писать. И не было бы претензий:
От альфа-версии никто ничего не хочет. Хочется, чтобы в голове не возникало мыслей, вроде: "Что он имел ввиду - придумано дебилами или придумано для дебилов?". Сами же пошли на конфронтацию. Видимо ниже этой цитаты я не раскрыл свою мысль до конца. Цитату привел как обобщение, характеризующее происходящее вокруг яваскрипт. А сама цитата действительно взята из темы, в которой народ упорно желал видеть в яваскрипт "Класс" и другие знакомые слова.
Я уже дал понять, вокруг чего и из-за чего начались "жаркие споры". Стало понятно это и Вам, раз Вы перефразировали написанное ранее. Не будь этого, мы бы с Вами уже продвинулись значительно дальше в глубь вашего сценария, забыв до бэты про этот второстепенный метод... |
||||||
|
|||||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
боюсь претензии были бы в любом случае
обновил сабж. теперь $clone работает правильно. |
|||
|
||||
| AKS |
|
|||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 2 Всего: 52 |
Не-а! С какой стати? Вопросы-расспросы, замечания-предложения - это возможно (если, конечно, моих, к примеру, знаний на это хватит). Но какие могут быть претензии? Вот например, возвращаясь все к тому же $clone, могу сказать, что использование $each сильно тормозит процедуру клонирования. Если обходится простым присваиванием вместо вызова функции для каждого поля объекта, получится солидная экономия... |
|||
|
||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
> какие могут быть претензии?
уж не знаю.. это ты заговорил о притензиях - тебе виднее > Если обходится простым присваиванием вместо вызова функции так и происходит при использовании одноуровневого клонирования $clone( false ). |
|||
|
||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
||||
|
||||
| AKS |
|
|||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 2 Всего: 52 |
Нет, все не так. 1. Метод $clone вызывает метод $each. 2. Метод $each на каждой итерации for in вызывает функцию. 3. Функция на каждой итерации вызывается в текущем контексте, используя для этого метод apply. Все это происходит не зависимо от глубины клонирования. Именно эти три этапа я и предложил Вам заменить на один - операцию присваивания. |
|||
|
||||
| Zeroglif |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 1 Всего: 66 |
Понимаешь, брать неоткоментированную либу и разбирать в ней каждую строчку - слишком жирно получится, достаточно уже посмотреть 2-3 куска, чтобы составить представление о качестве, несмотря даже на альфавость версии. Ты вообще не контролируешь тип значений, переопределяшь зачем-то по кругу методы, несмотря на наследование, экстенсивно расширяешь нативные прототипы, что уже настораживает, особенно в свете работы нескольких фреймворков рядом, переопределяешь ради "красоты" алерта важнейший метод toString, логика некоторых функций или отжигает, или несёт в себе неизвестный глубокий смысл и т.д. и т.п. На таком уровне развития imho этот фреймворк вряд ли будет кому-то сильно полезен. Доводи код до нужной кондиции и получишь тёплый приём. Не знаю, что на твоём языке означает "правильно", но метод $clone как работал никак, так и продолжает работать никак. При deep-клонировании объекты "подтипа" Function не отсекаются на подходе со всеми вытекающими последствиями, объекты "подтипов" Boolean, Number, String не клонируются (только копируется значение - ссылка на объект), про прочие "подтипы" пока ничего не слышно, значения null и undefined по какой-то причине за значения вообще не считаются и игнорируются (ничего себе клонирование), при нестрогом равенстве значения собственного свойства значению наследуемого свойства собственное свойство также игнорируется, оно же игнорируется и при нестрогом равенстве значению ненаследуемого свойства (например, для конструктор.prototype, хотя какая связь?), разреженный массив теряет значение length оригинала, при клонировании объекта со свойством, значением которого является сам клонируемый объект, скрипт улетает в loooooooop... |
|||
|
||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
AKS, не, я против такого размывания функционала: ручное итерирование в каждом методе лишь бы выиграть пару тактов процессора + необходимость перегружать соответствующие функции в потомках.
например, сейчас array от object отличается лишь способом итерирования (метод $each), остальные методы объекта используя этот метод работают и в массиве. при ручном итерировании в каждом методе, пришлось бы каждый метод объекта переписать и для массива. Это сообщение отредактировал(а) cruelangel - 8.10.2007, 12:11 |
|||
|
||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
> брать неоткоментированную либу и разбирать в ней каждую строчку
там довольно короткие и достаточно понятные методы. писать прямо перед фразой на яваскрипт ту же самую фразу на английском - на мой взгляд достаточно глупо. > переопределяшь зачем-то по кругу методы, несмотря на наследование уже нет > экстенсивно расширяешь нативные прототипы, что уже настораживает что в этом плохого? > переопределяешь ради "красоты" алерта важнейший метод toString ты так и не рассказал, почему его не стоит перегружать... > несёт в себе неизвестный глубокий смысл о каких функциях идёт речь? > объекты "подтипов" Boolean, Number, String не клонируются
> значения null и undefined по какой-то причине за значения вообще не считаются и игнорируются null и undefined - это отсутствие данных. незачем их "клонировать". > при нестрогом равенстве значения собственного свойства значению наследуемого свойства собственное свойство также игнорируется поправил, спасибо > разреженный массив теряет значение length оригинала, при клонировании объекта со свойством всё правильно, length по логике должно быть равно количеству элементов, а не просто абстрактной "верхней границей". > при клонировании объекта со свойством, значением которого является сам клонируемый объект, скрипт улетает в loooooooop маловероятно, чтобы такой объект требовалось клонировать, а добавлять проверку на циклические ссылки - довольно накладно... Это сообщение отредактировал(а) cruelangel - 8.10.2007, 12:43 |
|||
|
||||
| Zeroglif |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 1 Всего: 66 |
Ты сейчас комментируешь свою либу, только уже здесь на форуме вроде "это здесь и не надо было", "тут так и задумано", "эти значения не предполагалось клонировать" и т.п. Для тебя может и ничего, для тех, кто ждёт от либы универсальности, неконфликтности, предсказуемости и простоты - ничего хорошего, вспоминая, что такое делегирование/наследование. Потому что его поведение предопределено, документировано и увязано со многими операциями, на этом программист может строить расчёт, а у тебя самодеятельность, начиная от того, что алерт пишет самопал, конвертация объектов самопальная и т.д. и т.п. Ну, допустим $proto $each $haskey $clone Это ты написал сходу или протестировал, посмотри внимательнее на функцию и найди в ней создание нового объекта:
Тогда и ноль туда же и пустую строку... весёлый клон получится, null часто используется для осознанного закрытия слота (подготовка под будущее объектное значение и т.п.), то есть null, как правило кладут со смыслом или DOM это возвращает, что тоже несёт смысл, а ты его отвергаешь, лишая объект свойства, заведомо существующего у оригинала.
У javascript другая логика, свойство length может существовать как зависимо, так и независимо, а учитывая то, что само это свойство прямо влияет на массив, хорош будет тот клон с другой длиной. Остаётся только домыслить, как ты обрабатываешь массив и его клон в паре по единой логике, и что там можно наворотить... |
||||||||
|
|||||||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
> Ты сейчас комментируешь свою либу, только уже здесь на форуме вроде "это здесь и не надо было", "тут так и задумано",
нет смысла идеологию фреймворка напоминать перед каждой функцией. для этого предназначена документация, которая будет чуть позже. > для тех, кто ждёт от либы универсальности, неконфликтности, предсказуемости и простоты опыт проторайпажс ико показывает, что это не вызывает проблем. > этом программист может строить расчёт что-то типа if( [1,2,3] == '1,2,3' ) ? > $proto $each $haskey $clone а из кода не очевидно что они делают? > Это ты написал сходу или протестировал, посмотри внимательнее на функцию и найди в ней создание нового объекта: почисти кэш > Тогда и ноль туда же и пустую строку... нет, ноль, не смотря на одинаковое название, является числом, а пустая строка - строкой не содержащей символов. а вот null - это именно отсутствие данных. также как и undefined. просто в первом случае "данные были стёрты", а во втором "данные небыли внесены". да, в каком-нибудь подтипе $haskey может быть перегружен в результате чего, например, пустая строка или числа меньше нуля не будут учавствовать в итерировании, гарантируя определённый вид данных передаваемых колбэку. > то есть null, как правило кладут со смыслом и этот смысл - стирание данных. нет смысла "отсутствию данных" учавствовать в итерировании.
> как ты обрабатываешь массив и его клон в паре по единой логике, и что там можно наворотить эт ты о чём? Это сообщение отредактировал(а) cruelangel - 8.10.2007, 14:25 |
|||
|
||||
| Zeroglif |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 1 Всего: 66 |
Не эталон. Скорее, наоборот. А приноровившись, можно и лампочку научиться вворачивать всем телом. И это тоже... Очевидно, что делают, местами не очевидно зачем они это делают. Мне не надо чистить кэш, я скачиваю скрипты и их тестирую/смотрю в редакторе, предпоследний был скачан после твоего первого и последнего уведомления об обновлении, дальше ты молчал, а перекачивать и diff-ить сорцы после каждого твоего поста - уволь. Захочешь - скажешь, что поменял.
Да, на здоровье, просто выполняя одну задачу - клонирование, ты заодно выполняешь и другую задачу, не имеющую прямого отношения к клонированию - игнор свойств, которые ты считаешь, не содержащими данных, в процессе перечисления. В javascript-е и так практически невозможно клонировать объект, а если во время этой задачи ещё и как-то модифицировать результат, то на выходе будет что угодно, но только не клон. Дальний родственник из Семипалатинска. Метод стоит переназвать $cloneAndSomethingElse...
Итерируют не данные, а существующие свойства (которые не закрыты от этого процесса соответствующим атрибутом), какие там у свойств значения - не имеет значения. Кроме этого, роль собственных свойств (безотносительно значений) ещё и в том, что они перекрывают/затеняют одноимённые свойства прототипа:
Во-первых, toString там не нужен, во-вторых, ты там делаешь принудительную конвертацию в число с помошью плюса, сдаётся мне, что задумывалось другое, а оператор написан неправильно, в-третьих, вообще-то в javascript нужно частенько проверять тип значения, ничего тут странного нет, для этого не обязательно заранее готовить однородные структуры данных. О чём угодно. Ну, представь, некую процедуру, где по определённым правилам обрабатывается массив, где важно свойство length, где важен порядок элементов. А ты туда суёшь "как-бы-клон", у которого и порядок другой (нет "пустых-на-твой-взгляд" значений), и длина другая... |
||||||||
|
|||||||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
> предпоследний был скачан после твоего первого и последнего уведомления об обновлении
там был баг, который я спустя пару минут пофиксил. твой ответ последовал через сутки. > ты заодно выполняешь и другую задачу, не имеющую прямого отношения к клонированию это называется "ленивое удаление", когда слот не удаляется, а помечается удалённым и далее не учавствует в итерировании. соответственно при создании нового массива на базе старого новый автоматически получается "сжатым". есть ещё вариант с "трудолюбивым удалением", когда после удаления слота происходит автоматическое его сжатие. первый вариант мне кажется более приемлемым. > они перекрывают/затеняют одноимённые свойства прототипа ок, убедил. null включаем в итерирование. > Во-первых, toString там не нужен во-первых вместо toString там может быть любой другой метод, не хотел усложнять код. > Ну, представь, некую процедуру, где по определённым правилам обрабатывается массив, где важно свойство length не могу себе такую представить. разве length используется ещё для чего-то кроме итерирования? |
|||
|
||||
| Zeroglif |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 1 Всего: 66 |
Ну, извини, не смог ежечасно сравнивать варианты скриптов (у меня уже 3 разных), в любом случае они все твои, обсуждение идёт не с потолка. Почему бы просто не оторвать эту задачу от клонирования и от других задач, где ты так же "сжимаешь"?
Даже выше постом в моём примере length используется для создания свойств массива b, к тому же length может удалять свойства ("...the length property is changed, every property whose name is an array index whose value is not smaller than the new length is automatically deleted"), это свойство важно, на нём играют. |
|||
|
||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
> в моём примере length используется для создания свойств массива b
такой кривой способ добавления элементов никак не конфликтует с моим с способом клонирования. > length может удалять свойства практика ничего подобного не подтверждает. Это сообщение отредактировал(а) cruelangel - 8.10.2007, 19:59 |
|||
|
||||
| cruelangel |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
в общем сделал клонирование массивов с сохранением ключей
это понадобилось для функции $combine (точнее не понадобилось, а могут возникнуть проблемы, если ей передать сжатый клон ) - что-то типа $map, но пробегает рекурсивно по всем объектам и все примитивные значения прогоняет через колбэк. с помощью $combine, например, можно реализовать векторную арифметику:
выведет:
то есть:
работает как с объектами, так и с массивами ( во втором параметре просто ищется поле с соответствующим ключом). вложенность не ограничена. примитивные объекты ( Number, String, Boolean ) ведут себя аналогично примитивным типам. также появился новый модуль - $date с функцией форматирования даты/времени. пока без "человекопонятного текста" Это сообщение отредактировал(а) cruelangel - 10.10.2007, 15:27 |
||||||
|
|||||||
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
вашу бы энергию, да в мирных целях..
наблюдая за тем, сколько вы обсуждаете и перемалываете теорию, мне даже становится немного жаль вас, потому что я не понимаю, как возможно, тратя такое количество времени и сил на познание глубин javascript, ещё и успевать принимать участие в каких-то реальных проектах и получать удовольствие от самого главного в программировании - от написания востребованных продуктов.. не всё ли равно как там и что написано? я вот написал за посл время 2 довольно крупных проекта - smartselect и mashchat. оба они написаны совершенно по разному. один основан на Object.prototype, другой на Class.create() и Object.extend() из всем известной библиотеки. может кто-то скажет что одно правильно, может кто-то скажет, что другое. какая разница? и то и то прекрасно работает и имеет все необходимые пути для действий, возможно потребующихся в дальнейшем. если хотеть писать, можно писать как угодно. лишь бы это было: быстро и качественно. а в идеале еще и - просто и красиво. так зачем изобретать в миллионный раз очередной велосипед, тратя на изучение предыдущих тонну времени, который будет отличаться от всех остальных еще и одним вариантом крепления педалей и "эргономичным" расположением колес? очевидно, покататься - времени уже не хватит.. в итоге в голову приходит только одна пословица.. про танцора с ногами.. извиняюсь за оффтопик. |
|||
|
||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
есть два типа людей: создатели и потребители. и они никогда друг друга не поймут
всё началось с того, что я задумал написать "правильный" визивиг. в то время я программировал на практически голом яваскрипте. кода было много, отлаживать было сложно, работало так себе. потом я стал присматриваться к фреймворкам, но оказалось, что они для этих целей они совсем не предназначены. вообще, у меня сложилось такое впечатление, что единственной целью их создания является возможность создания домохозяйками "прикольных эффектов" и "очередных кривых виджетов". |
|||
|
||||
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
создатель? мм) вот это круто ! и чем же фреймворки показались тебе убогими для достижения твоей цели? назови, хотя бы несколько функций, которых не хватало тебе для этого проекта.. странная у тебя логика.. яваскрипт - дебильный.. разработчики - кретины.. фреймворки - убогие.. используют все это дело домохозяйки.. |
|||
|
||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
> назови, хотя бы несколько функций, которых не хватало тебе для этого проекта..
кроссбраузерная работа с выделениями, работа с dom-узлами без скатывания к многословному native-javascript и изобретения велосипеда ( например - treewalker ) |
|||
|
||||
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
cruelangel, мм, и что - есть успехи с реализацией
? чем не устраивает реализция работы с dom-узлами того же jquery, я не понимаю? возможностей куча. и летает так шопипец... Добавлено через 5 минут и 4 секунды просто пока в твоей либе я вижу только либо "по-другому прикрученные педали", либо какие-то совсем дикие 3 колеса.. функция date была бы полезна, если реализовать её как в PHP и в форме addon`а к jquery, а лучше - к prototype. |
|||
|
||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
> мм, и что - есть успехи с реализацией кроссбраузерная работа с выделениями?
есть небольшие. всё же лучше, чем ничего... > чем не устраивает реализция работы с dom-узлами того же jquery, я не понимаю? наверное тем, что там её нет. > функция date была бы полезна, если реализовать её как в PHP это ужасная реализация. хотя, конечно, локали - вещь архинужная. |
|||
|
||||
| AKS |
|
||||||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 2 Всего: 52 |
Напрасны ваши сантименты. ;)
Вообще, любое непонимание зиждется на отсутствии необходимой информации. Но это не беда. Будет желание, будут возможности - и удастся узнать многое, и снизойдет божья благодать в виде вселенского понимания.
Поздравляю! Стандартный вопрос тех, кто использует сторонние разработки. Однако порой звучит довольно нелепо. Вот Вы, например, в самом деле считаете свои вышеупомянутые произведения уникальными? ??? |
||||||
|
|||||||
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
AKS, я уверен, что вы прекрасно понимаете, что приводя в пример 2 этих проекта я не ставил целью похвалиться или ещё что-то. мне это совершенно ни к чему. я просто хотел наглядно показать, как оба способа работы с объектами совершенно спокойно имеют место быть и работают, выполняя свое самое главное предназначение.
просто я как не зайду на форум - всё время все с умным видом рассуждают о том, что хорошо, а что плохо. однако ни к какому материальному применению все эти рассуждения, похоже, не приводят.. я в общем-то ничего не имею против этого, и совершенно не предполагал никакой конфликт, но мне иногда правда непонятно, зачем же столько времени уделять теории, когда на практику совсем не остается времени.. об изобретении велосипедов.. во-первых, одно дело - программный продукт. то о чем я говорил. программные продукты разрабатываются для кого-то конкретно, обычно заточены под требования конечного пользователя. совсем другое дело - такие вещи, как фреймворки и т.п. когда фреймворк уже разработан, и им пользуются миллионы людей по всей планете, лично мне кажется, не совсем рационально говорить о том, что он - отстой и разрабатывать свой, позиционируя его как аналог и замену существующему.. в обеих библиотеках есть возможности для их расширения и вообще участия в процессе разработки и отладки.. кстати, что касается тулкита smartselect - да, он уникален. откушу себе голову, если найдете достойного конкурента. чат - просто один из последних заказов. обыкновенный в общем-то чат. в данном случае дело совсем не в них. повторюсь, это был просто пример равносильности двух подходов. cruelangel, вот это совсем другое дело. с удовольствием поддерживаю реализацию полной кроссбраузерной поддержки xpath! в любом случае - все вышесказанное это просто мое личное мнение. мысли в слух.. ни в коем случае не хочу никого этим оскорбить или обидеть. |
|||
|
||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
добавил работу с текстовыми диапазонами и выделением
если $concerns и $contains окажется мало - всегда можно воспользоваться методом $compare. примеры его использования можно найти в коде. новые диапазоны создаются с помощью функции $range(). выделение также поддерживает сохранение себя в ДОМ и восстановление по меткам. правда я эти функции ещё не тестировал на этом фреймворке... ха-ха, общий непакованный объём уже под 25 кило и содержит 1200 строчек кода Это сообщение отредактировал(а) cruelangel - 14.10.2007, 01:25 |
|||
|
||||
| 02077461 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 13.7.2005 Репутация: нет Всего: 0 |
Вот тебе простейший пример, который начисто убил 40 минут моего времяни: Написал объект, который нес в себе массив, который в последствие посылался на сервер. Написан был год назад и работал как надо. Вот каково же было мое удивление, когда на сервер начала слаться в дополнение к нужной информации избыточная -- содержимое ф-ии. А дело было в следующем: нашел простой календарик (а-ля стаб) и использовал его. А в его коде через Array.prototype добавлялась ф-ия (имя не запомнил, т.к. потер сразу когда разобрался). Массив я пробегал через for (p in this.params), потому как имена ключей были именами переменных. И вот мне выдавалась лишняя пара: имя функции -> ее содержимое. Конечно, коды разные нужны, коды разные важны. Но у себя мы пришли к выводу, что использование внешних либ хорошо если речь идет только о визуализации (а-ля мутул и пр.). В остальном легче потратить время на написание НЕУНИВЕРСАЛЬНОГО, но заточенного под нашу задачу подхода. Это сообщение отредактировал(а) 02077461 - 3.1.2008, 19:48 |
|||
|
||||
| 02077461 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 13.7.2005 Репутация: нет Всего: 0 |
http://extjs.com/playpen/ext-2.0-dev5/exam...orm/combos.html Видео с процессом лишения себя части тела прошу расшарить! |
|||
|
||||
| egao |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 6.8.2007 Репутация: нет Всего: нет |
> Массив я пробегал через for (p in this.params), потому как имена ключей были именами переменных.
да, есть в яваскрипте такой баг. поэтому все фреймворки расширяющие прототипы кроме прочей требухи добавляют и метод итерирования. у меня это - $each. > В остальном легче потратить время на написание НЕУНИВЕРСАЛЬНОГО, но заточенного под нашу задачу подхода. проблема в том, что задачи постоянно меняются и переписывать код каждый раз задалбывает. |
|||
|
||||
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
02077461, не грузится
Добавлено через 3 минуты и 29 секунд ну да, хорошая реализация |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 2 Всего: 386 |
02077461, На месте smartselect, перед тем как откусывать себе голову, я бы подумал - действительно ли + 200к на страницу - это "достойно" ;)
Ext - это хорошо для локалки и/или интранетных приложений, для интернета ext несколько, имхо, тяжеловат'с... Это сообщение отредактировал(а) ksnk - 4.1.2008, 09:08 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
ksnk, да, кстати, что очень жаль.. :( я пару раз пытался тащить из неё компоненты, но все время получается от 200 к..
|
|||
|
||||
![]()
|
| Здесь публикуют скрипты, которые уже проверены в обсуждениях других тем (при этом полезно поставить ссылки на все смежные обсуждения) или переносятся кем-либо из модераторов по просьбе участников, если видно, что в результате обсуждения темы был написан полезный или интересный скрипт. Третий возможный вариант - участник форума публикует скрипт, заведомо известный как полезный и эффективный, для, возможно, небольшой доработки и обсуждения. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Наши скрипты | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |