![]() |
Модераторы: 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 секунд > Так написал, потому что и там, и здесь "нагородили огород" вокруг прототипов встроенных объектов. это одна из самых мощных особенностей данного языка. грех ею не воспользоваться. |
|||
|
||||
![]() ![]() ![]() |
Здесь публикуют скрипты, которые уже проверены в обсуждениях других тем (при этом полезно поставить ссылки на все смежные обсуждения) или переносятся кем-либо из модераторов по просьбе участников, если видно, что в результате обсуждения темы был написан полезный или интересный скрипт. Третий возможный вариант - участник форума публикует скрипт, заведомо известный как полезный и эффективный, для, возможно, небольшой доработки и обсуждения. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Наши скрипты | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |